在 clang 4.0 中,利用 c++17 auto 模板参数,我现在可以编写这样的函数(事实证明这在很多情况下都非常有用):
template<auto member_function, typename OBJECT>
auto call_member_fct(OBJECT object){
return (object.*member_function)()
}
(G++ >= 7 提供了相同的可能性,但我没有测试过)
这个函数有一个有用的特性,你可以用一个模板参数调用它,实际的成员函数:
call_member_fct<&action::count>(action())
不幸的是 vs2017 不允许这样做。 是否有一种语法解决方法允许在 vs2017 中使用具有单个 模板参数的相同调用,并自动扣除函数签名和对象?
最佳答案
并非完全 100% 相同,但应该适用于大多数情况。您可以让成员函数有一个参数:
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);
}
关于c++ - 作为模板参数的成员函数和 c++17 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44319899/