C++ 模棱两可的函数模板

C++ 模棱两可的函数模板,c++,templates,enable-if,C++,Templates,Enable If,如果应用于返回类型,我希望通过enable_选择特定的函数模板 一个简单的例子是区分有符号参数和无符号参数 #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

如果应用于返回类型,我希望通过enable_选择特定的函数模板

一个简单的例子是区分有符号参数和无符号参数

#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;
}
这里我得到了编译器错误:重载'fooint'的调用是不明确的 std::cout您缺少enable_末尾的::type,如果是,即使条件为false,也不会发生错误

您可以使用enable\u if\t或添加::类型,如

您缺少enable_末尾的::type,即使条件为false,也不会发生错误

您可以使用enable\u if\t或添加::类型,如


正如Tyker已经回答的那样,您缺少enable_if中的::type

顺便说一下,您可以通过使用std::enable\u if\t来减少样板文件的数量


正如Tyker已经回答的那样,您缺少enable_if中的::type

顺便说一下,您可以通过使用std::enable\u if\t来减少样板文件的数量

typename std::enable_if<std::is_signed_v<T>, bool>::type
template<typename T>
std::enable_if_t<std::is_signed_v<T>, bool>
foo(T t)
{
  return true;
}

template<typename T>
std::enable_if_t<!std::is_signed_v<T>, bool>
foo(T t)
{
  return false;
}