У меня есть набор классов;один является шаблоном и принимает два других класса в качестве аргумента шаблона.Шаблон класса имеет член-указатель на функцию, который будет указывать на функцию класса T
.Я пытаюсь вызвать вызов функции через класс operator()()
.
. Вот как мой код выглядит так:
template<class T>
class A {
private:
T* ptrT{ nullptr };
public:
explicit A( T t ) : ptrT( &t ) {}
void(T::*func)();
void operator()() {
(ptrT->*func)();
}
};
class B {
int ib{2};
public:
void func() {
std::cout << ib << '\n';
}
};
class C {
int ic{6};
public:
void func() {
std::cout << ic << '\n';
}
};
int main() {
try {
B b;
C c;
A<B> a1( b );
A<C> a2( c );
a1.func = &B::func;
a2.func = &C::func;
a1();
a2();
} catch( std::runtime_error& e ) {
std::cerr << e.what() << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
Пока что это компилируется, однако кажется, чтона выходе отображается адрес указателя функции, а не значения ...
-Output-
// 1st Run
20326695
20326703
// 2nd Run
2304295
2304303
// 3rd Run
1780007
1780015
Я знаю, что для получения фактического значения IЯ должен что-то почтить, но из-за того, что синтаксис указателей на функции-члены класса немного неясен, я не знаю, что нужно защищать, ни правильный синтаксис ... Я был бы признателен за любую помощь!