模板和函数指针混淆

时间:2016-07-18 03:52:19

标签: c++ templates c++11

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

1 个答案:

答案 0 :(得分:1)

  

首先是那种模板是什么?如果它是模板类,我不应该在A类顶部对模板进行处理吗?

HelloLIVE

  

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

因为template<class T> void Hello(void(T::*func)()) { T t; (t.*func)(); } 的参数{{1}}不是函数指针,而是成员函数指针。你需要一个对象来调用它。 e.g。

{{1}}

{{3}}