成员函数作为模板参数和c ++ 17等效

时间:2017-06-02 02:29:10

标签: c++ templates c++17 auto member-functions

在clang 4.0中,利用c ++ 17自动模板参数,我现在可以编写这样的函数(在许多情况下证明非常有用):

template<auto member_function, typename OBJECT>
auto call_member_fct(OBJECT object){
    return (object.*member_function)()
}

(G ++&gt; = 7提供相同的可能性,但我没有测试过它)

该函数具有有用的功能,您可以使用单个模板参数(实际成员函数)调用它:

call_member_fct<&action::count>(action())

不幸的是vs2017不允许这样做。 是否有语法解决方法允许在vs2017中使用与 模板参数相同的调用,并自动扣除函数签名和对象?

1 个答案:

答案 0 :(得分:0)

不完全相同,但在大多数情况下应该这样做。您可以将成员函数作为参数:

template <class T, class Ret>
auto yolo(auto (T::* mem) () -> Ret, T& obj)
{
    return (obj.*mem)();
}

这样打电话:

struct X { auto foo() { return 24; }};

auto test()
{
    X x;
    return yolo(&X::foo, x);
}