在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中使用与 单 模板参数相同的调用,并自动扣除函数签名和对象?
答案 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);
}