繁体   English   中英

功能指针的C ++ 11 HOWTO模板别名

[英]C++11 HOWTO template aliasing for function pointers

我需要在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]
}

现在,添加模板需要使用关键字关键字,因此我尝试了:

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;
};

我没看到问题。 唯一看起来很奇怪的是,您在别名中使用P作为类模板。 在代码段中, P不是模板。

无论如何,这就是我使用的成员函数指针:

template <typename Class, typename Ret, typename ... Args>
using MemFunPtr = Ret (Class::*)(Args ...);

您可以像这样使用它:

struct A
{
    void fun(int, char) { cout << "whoop\n"; }
};


int main()
{
    MemFunPtr<A, void, int, char> m = &A::fun;

    A a;
    (a.*m)(5, 'a');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM