gpt4 book ai didi

C++ 重载模板赋值或回调函数

转载 作者:行者123 更新时间:2023-12-02 08:46:05 25 4
gpt4 key购买 nike

尝试做一些类似的事情...

template <class T>
struct Wrapper
{
template <class U>
void set(const U& u) { myT = u; }

template <class F>
void set(F f) { myT = f(); }

T myT;
};

我知道我需要在这里使用 SFINAE,但是如何区分回调参数和值参数?可以安全地假设值不能用作回调。

我尝试过将 enable_ifis_function、result_ofinvoke_resultis_invocable 等一起使用,但都没有它工作正常。有可能吗?

最佳答案

无需 SFINAE 即可完成:

template<class U>
void set(const U& u) {
if constexpr (std::is_invocable_v<U>)
myT = u();
else
myT = u;
}

或更通用的方式:

template<class U>
void set(U&& u) {
if constexpr (std::is_invocable_v<U>)
myT = std::forward<U>(u)();
else
myT = std::forward<U>(u);
}

关于C++ 重载模板赋值或回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58927316/

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