gpt4 book ai didi

c++ - 作为模板参数的成员函数和 c++17 等价物

转载 作者:太空宇宙 更新时间:2023-11-04 13:00:39 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com