typedef的模板,它接受指向const和非const函数的指针

vla*_*don 3 c++ member-function-pointers c++14

这是指向接受两个int并返回int的类方法的指针:

template <typename T>
using TFunction = int (T::*)(int, int);
Run Code Online (Sandbox Code Playgroud)

我只能传递非const方法.如何更改此模板以便它接受const和非const方法?

Que*_*tin 6

这种情况对于条件来说很简单:

template <typename T>
using TFunction = std::conditional_t<
    std::is_const_v<T>,
    int (T::*)(int, int) const,
    int (T::*)(int, int)
>;
Run Code Online (Sandbox Code Playgroud)

现在TFunction<Foo>int (Foo::*)(int, int),而且TFunction<Foo const>int (Foo::*)(int, int) const.

  • 删除了我的原始评论,因为这很棒.即使一般来说`T`必须是一个id-expression(因此通常不能是`const T`),模板上下文允许使用类型信息,*和*保持指向成员的指针形成. (2认同)