c++ - C++中函数指针的模板typedef

标签 c++ function templates pointers typedef

<分区>

假设我有一个模板类,我在其中定义了指向 BaseClass 函数的函数指针的 typdedef,它返回 T 并且没有参数:

template <typename T, typename BaseClass> class TConnectionPoint
{
    typedef   T (BaseClass::* PConnectionFunction)();
    private:
       PConnectionFunction _func;
    public:
       T Call();
}

这个模板有方法 Call():

template <typename T, typename BaseClass> T TConnectionPoint<T,BaseClass>::Call()
{
    return _func();
}

当我尝试执行 Call() 函数时出现问题 - VS2013 向我发送此错误,这让我有点困惑:

term does not evaluate to a function taking 0 arguments

我做错了什么?

最佳答案

typedef 将 PConnectionFunction 定义为一个成员 函数指针,而不是一个普通的函数指针。您只能在对象上调用成员函数,如下所示:

template <typename T, typename BaseClass> 
T TConnectionPoint<T,BaseClass>::Call(BaseClass& b)
{
    return (b.*_func)();
}

如果您想调用 static 成员函数 ob BaseClass,则函数指针需要是普通函数指针,而不是成员函数指针:

typedef   T (* PConnectionFunction)();

关于c++ - C++中函数指针的模板typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33033947/

相关文章:

c++ - 多线程 C++,将带有参数的函数从类传递到 main

c++ - 需要帮助解决使用模板的运行时多态性

javascript - 如何使用一个 Javascript 函数将数组中多张图片的大小加倍

c++ - 函数参数默认值为 "passing_parametr"*2

c++ - 来自不同特化的模板类继承

java - 对 Java 电子邮件模板的建议?

c++ - std::move 在 boost 库中的对应物

c++ - (C++) 使用功能测试工具

python - 从 Django 模板获取 URL 的第一部分

c++ - Boost asio async_read_some 返回少量数据