在以下情况下类型推导失败。如果我将模板参数指定为someFunc,它将进行编译。我肯定知道这是一个奇怪的情况,但是如果我能使它工作的话,那就太好了。有没有一种替代方法可以在不提供模板参数的情况下进行编译? C ++ 17解决方案很好。
new Vue({
el: '#app',
created() {
console.log("Created");
}
});
答案 0 :(得分:5)
在
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;
}
答案 1 :(得分:0)
否,choose_arg_type<T>
在非推论上下文中。已经有很多重复了。
但是,您可以有两个重载,并可以根据类型启用SFINAE。