我现在开始学习c ++。我对这个定义很困惑。这只是一次性代码,因为实际实现在我正在阅读的书上
class A
{
public:
template<class T>
void Hello(void(T::*func)())
{
func(); // Not working. Error term does not evaluate to function taking 0 argument
}
};
class B
{
public:
void funcA()
{
std::cout << "Hello world" << std::endl;
}
// This is called function pointers
void funcB(void(*ptr)())
{
ptr();
}
};
void main()
{
A a;
a.Hello(&B::funcA);
}
首先是那种模板是什么?如果是模板类,我不应该对 A类顶部的模板进行操作吗?
为什么我不能像调用函数指针一样调用Hello()
上的func?
答案 0 :(得分:1)
首先是那种模板是什么?如果它是模板类,我不应该在A类顶部对模板进行处理吗?
Hello
是LIVE。
为什么我不能像调用函数指针一样调用Hello()上的func?
因为template<class T>
void Hello(void(T::*func)())
{
T t;
(t.*func)();
}
的参数{{1}}不是函数指针,而是成员函数指针。你需要一个对象来调用它。 e.g。
{{1}}
{{3}}