函数指针的 C++11 HOWTO 模板别名

标签 c++ visual-c++ c++11

我需要代码在 Visual Studio 2013 上编译

最初我有:

class P
{
    typedef void* (P::*FunctionPtr)(void);
    typedef void* (*T_ptr)(void*);

    private:    
        T_ptr getCompatibleFunctionPointer(FunctionPtr funcPtr);
        T_ptr m_t_ptr;

    public:
        [omitting constructors, etc]
}

现在,添加模板需要关键字 using 所以我试过:

typedef  void* (*T_ptr)(void*);

//tried this:
template<typename objectThread>
using FunctionPtr = void(P<objectThread>::*)(void);
//also tried:
template<typename objectThread>
using FunctionPtr = void(P< typename objectThread>::*)(void);
//also tried:
template<typename objectThread>
using FunctionPtr = void(P< typename objectThread>*)(void);

template<typename objectThread>
class P{


private:

    template<typename objectThread>
    T_ptr P<objectThread>::getCompatibleFunctionPointer(FunctionPtr funcPtr) {}
    T_ptr m_t_ptr;

};

我找不到实现我需要的方法。我确实需要保留模板并且不能使用 Boost(以防万一)。

最佳答案

你可以在类中声明它

using FunctionPtr = void(P<objectThread>::*)();

那只是在类里面使用它。

所以,你的代码将只是

template<typename objectThread>
class P{
    using T_ptr = void*(*)(void*);
    using FunctionPtr = void(P<objectThread>::*)();
private:
    T_ptr getCompatibleFunctionPointer(FunctionPtr funcPtr) {}
    T_ptr m_t_ptr;
};

关于函数指针的 C++11 HOWTO 模板别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26653035/

相关文章:

C++ 多个版本的默认特殊成员函数——MSVC 2015 中的错误

c++ - 这个针对 MSVC 双重检查锁定错误和函数静态的解决方案有什么问题?

c++ - 我可以使用模板/宏/两者来包装 C++ 类的每个函数吗?

c++ - C++ 新手 : Creating a 2D array and having a correct assignment operator: Segmentation Error

c++ - 在没有 #define 的情况下捕获 __LINE__ 和 __FILE__

c++ - 为什么 `\n` 刷新 std::cout?

android - 如何将字符串数组返回给java JNI

c++ - 可以将数组的子部分传递给函数吗? C++

c++ - 在 Windows 服务的控制台中显示消息

c++ - 输出流运算符的重载