Я ссылался на этот несколько похожий вопрос. Однако здесь сценарий другой:
struct A
{
void foo (int i) {} // choice
void foo (double i) {}
};
template<typename ObjType, typename FuncPtr>
void ReceiveFuncPtr (ObjType o, FuncPtr pf)
{
(o.*pf)(1);
}
int main ()
{
A obj;
ReceiveFuncPtr(obj, &A::foo); // don't want typecast here
}
В приведенном выше тестовом коде у меня есть перегруженный foo
внутри A
. Если бы было только 1 foo
, код работал бы нормально. Но в случае перегрузки компилятор жалуется как:
ошибка: нет соответствующей функции для вызова `ReceiveFuncPtr(A&, [неразрешенный тип перегруженной функции])'
Вместо явного приведения типов при вызове ReceiveFuncPtr()
есть ли способ внести некоторые изменения в его параметр template
и позволить ему всегда получать версию foo(int)
для любого подобного class A
?
Изменить. Идея состоит в том, чтобы не беспокоиться о типе при вызове функции. Это должно быть так просто, как ReceiveFuncPtr(obj, &A::foo);
И пусть template
делает свою работу.