模板和函数指针混淆了

Template and function pointer confuse

本文关键字:指针 函数      更新时间:2023-10-16

我现在开始学习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);

}

首先,那是什么样的模板?如果它是一个模板类,我不应该delcare类a顶部的模板吗?

为什么我不能像调用函数指针一样调用Hello()上的func?

首先,那是什么样的模板?如果它是一个模板类,我不应该delcare类a顶部的模板吗?

A::Hello是成员函数模板。

还有,为什么我不能像调用函数指针一样调用Hello()上的func?

因为Hello的参数func不是函数指针,而是成员函数指针。你需要一个物体来调用它。例如

template<class T>
void Hello(void(T::*func)())
{
    T t;
    (t.*func)();
}

LIVE