Предположим, что все включения определены, просмотрите структуру кода, определенную ниже.
std::unordered_map<std::string, void*> callbackReg;
class A
{
public:
void foo(int a)
{
//impl
}
void foo(int a, int b)
{
//impl
}
void foo(int a, double d)
{
//impl
}
};
template<class Instance , typename Function>
void register_func(Instance& obj, Function func)
{
/* have to store function name as the key and
- pointer to raw member function pointer as the value,
- in callbackReg Map */
// ---> Point B
}
int main(int argc, const char * argv[])
{
A a;
register_evt(a, &A::foo); //---> point A
system("Pause");
}
Проблемы и обсуждения
- @
Point A
как решить проблему с разрешением области имен функций, что означает, как вызвать перегруженную функцию / указатель на такую функцию? без встроенного статического приведения, потому что это делает немного уродливым и грязным.
- @
Point B
предположим, что мы исправили проблему с переопределением имени перегрузки, и теперь мы должны сохранить имя функции элемента и его значение указателя в callbackReg
карта.
Я знаю, может ли это быть плохим громоздким подходом, но возможно ли это в C ++? или же есть какой-либо способ сохранить raw memeber funtion pointers
с каким-либо другим значением ключа, чтобы использовать их как callbacks
. Поскольку во время debug
, отладчик уже знает, какое имя функции передается как register_func
аргумент функции шаблона.
Пожалуйста, посмотрите на изображение.
(Пожалуйста, если решение или методология кроссплатформенный подход, который был бы благодарен, по крайней мере, на основе Win32)