gpt4 book ai didi

c++ - 有什么办法可以解决这种类型推导吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:41:42 25 4
gpt4 key购买 nike

以下情况类型推导失败。如果我将模板参数指定给 someFunc,它就会编译。我肯定知道这是一个奇怪的案例,但如果我能让它工作那就太好了。是否有另一种方法可以在不提供模板参数的情况下进行编译? C++17 解决方案很好。

#include <type_traits>

template<typename T>
using choose_arg_type = typename std::conditional<std::is_fundamental<T>::value,T,const T &>::type;

template<typename T>
T someFunc(choose_arg_type<T> arg)
{
return arg + arg;
}

int main()
{
auto result = someFunc(0.0);

return 0;
}

最佳答案

template<typename T>
T someFunc(choose_arg_type<T> arg)

T 是依赖类型。因此,这里不会发生类型推导。您可以使用 SFINAE 解决此问题。并在类型是否为基本类型时引入一组重载。看起来像

template<typename T, std::enable_if_t<std::is_fundamental_v<T>, bool> = true>
T someFunc(T arg)
{
return arg + arg;
}

template<typename T, std::enable_if_t<!std::is_fundamental_v<T>, bool> = true>
T someFunc(const T& arg)
{
return arg + arg;
}

关于c++ - 有什么办法可以解决这种类型推导吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54149962/

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