我们可以使用MemberFunction类型作为模板参数吗?

JQ.*_*JQ. 2 c++ templates member-functions

如果有class T{ void M() };,我希望有一个模板类可以T::M用作模板参数.说这样的话:

T t;
TUser<T::M> user(t);
Run Code Online (Sandbox Code Playgroud)

可能吗?

K-b*_*llo 5

是的,可能的:

template< typename T, void (T::*M)() >
struct something
{
    void somewhere( T* obj )
    {
        (obj->*M)();
    }
};
Run Code Online (Sandbox Code Playgroud)

它的使用方式如下:

T t;
something< T, &T::M > user;
user.somewhere( &t );
Run Code Online (Sandbox Code Playgroud)