C++ 为特定类型专门化模板函数

C++ 为特定类型专门化模板函数,c++,templates,C++,Templates,考虑此函数模板最多返回两个类型值: template<typename T> T max(T a, T b) { return a ? a > b : b; } 模板 T最大值(T a,T b) { 返回a?a>b:b; } 是否可以像对类一样为用户定义的类型定义单独的行为?看起来像这样的东西 template<> Entity max<Entity>(const Entity a, const Entity b) { std::co

考虑此函数模板最多返回两个类型值:

template<typename T>
T max(T a, T b)
{
   return a ? a > b : b;
} 
模板
T最大值(T a,T b)
{
返回a?a>b:b;
} 
是否可以像对类一样为用户定义的类型定义单独的行为?看起来像这样的东西

template<>
Entity max<Entity>(const Entity a, const Entity b)
{
   std::cout << "this is an entity" << std::endl;
   return a ? a > b : b;
} 
模板
实体最大值(常量实体a、常量实体b)
{
std::cout
用于比较


提前感谢。

您的代码有一些问题。我已在下面的示例代码中修复了这些问题:

struct Entity
{
   bool operator >(const Entity & other)
   {
      return x > other.x;
   }
   int x = 0;
};

template<typename T>
T max(T a, T b)
{
   return a > b ? a : b;
}

template<>
Entity max(Entity a, Entity b)
{
   std::cout << "this is an entity" << std::endl;
   return a > b ? a : b;
}

int main()
{
   Entity e1;
   Entity e2;

   e1.x = 12;
   e2.x = 13;

   Entity max_en = max(e1, e2);
}
struct实体
{
布尔运算符>(常量实体和其他)
{
返回x>other.x;
}
int x=0;
};
模板
T最大值(T a,T b)
{
返回a>b?a:b;
}
模板
实体最大值(实体a、实体b)
{

std::不能专门化。只是过载。@Alex你为什么要复制所有东西?