У меня есть очень простое определение класса следующим образом:Пытаясь избежать многократного вызова функции
#include "../bshttp/controllers.h"
#include <iostream>
#include <string>
class DerivedController : public BS_Controllers
{
public:
DerivedController():BS_Controllers(this)
{
m_urlRules["print"] = REG_NAME &DerivedController::print;
//regController(REG_NAME &DerivedController::print,"print");
regController(REG_NAME &DerivedController::printView,"printView");
}
void * print()
{
return NULL;
}
void * printView()
{
cout<<"Print view!"<<endl;
return NULL;
}
};
где либо
m_urlRules["print"] = REG_NAME &DerivedController::print;
или
regController(REG_NAME &DerivedController::printView,"printView");
должен вызываться для всех функций-членов. Что он делает, что он принимает указатель функции-члена класса и отображает его со строкой, поэтому позже функция может быть идентифицирована со строкой.
Все хорошо работает и работает, но когда структура класса становится больше, программисту придется повторить эту функцию для каждой отдельной функции-члена. Есть ли в любом случае использовать препроцессор или любую библиотеку предварительной обработки, такую как волна boost-wave, чтобы программисту не приходилось выполнять эти повторные вызовы?
EDIT: Извините за недоразумение, я явно недостаточно описывал проблему. Я привязываю строки к указателю функции-члена;
m_urlRules является станд :: карта с строкой в качестве ключа, и указатель на функцию члена в качестве значения regController в основном функция сеттер для m_urlRules, поэтому оба утверждения фактически делает то же самое, что отображает строку в функции члена ,
REG_NAME - это макрос, заменяющий очень уродливый тип.
, что я пытаюсь сделать то, что, если класс, где иметь следующую структуру,
class DerivedController : public BS_Controllers
{
public:
DerivedController():BS_Controllers(this);
void * print();
void * print2();
void * print3();
void * print4();
};
я не должен выполнить следующие действия в конструкторе:
m_urlRules["print"] = REG_NAME &DerivedController::print;
m_urlRules["print1"] = REG_NAME &DerivedController::print1;
m_urlRules["print2"] = REG_NAME &DerivedController::print2;
m_urlRules["print3"] = REG_NAME &DerivedController::print3;
m_urlRules["print4"] = REG_NAME &DerivedController::print4;
Кажется, вы описываете проблему с воображаемым способом сделать что-то, а не описывать что-то, что есть? –
Где и как определяются 'm_urlRules' и' regController'? Является ли 'REG_NAME' макросом, который делает какой-то листинг? – jxh
'm_urlRules' - это std :: map для строк для указателей функций-членов. 'regController' в основном является сеттером для карты, которая делает то же самое. 'REG_NAME' - макрос типа – leorex