【发布时间】:2018-08-07 08:22:57
【问题描述】:
我想通过 enable_if 选择一个特定的函数模板应用于返回类型。
一个简单的例子是区分有符号和无符号参数。
#include <iostream>
#include <type_traits>
template<typename T>
typename std::enable_if<std::is_signed_v<T>, bool>
foo(T t)
{
return true;
}
template<typename T>
typename std::enable_if<!std::is_signed_v<T>, bool>
foo(T t)
{
return false;
}
int main(){
std::cout << foo<uint32_t>(42) << std::endl;
return 0;
}
这里我得到编译器错误:call of overloaded ‘foo<uint32_t>(int)’ is ambiguous
std::cout << foo<uint32_t>(42) << std::endl;
我知道如果我使用 foo(42) 会很模糊,因为 42 可以转换为有符号的无符号。但是,如果我像示例中那样明确指定 tempalte 参数,我希望它可以工作。
我的代码有什么问题,我该如何解决?
【问题讨论】: