比较模板类型和具体类型的实例

时间:2012-01-11 01:23:07

标签: c++ templates comparison

我猜有时在编写模板函数时,您可能还遇到了需要将模板参数类型化实例与具体类型实例进行比较的情况

template<class A> void foo()
{
   A* something=new A(); //new A() mightnot exist
   if(*something==70000)
   {
      cout<<"Item 42\n";
   }
}

但重要的是模板不能脱离当前的设计。你将如何改变和重构你的功能?我很感谢你将分享你在现实生活中的经验

1 个答案:

答案 0 :(得分:1)

在任何可能出现的情况下,只要您的A类为其定义了operator==()方法,并且它可以隐式转换为与之比较的具体类型(即,没有明确的)演员是必需的),然后没有问题。否则,你最终会遇到一个编译器错误,这是一件好事,因为它在编译时而不是在运行时指出你的错误。

例如,假设您的A类定义如下:

template<typename T>
class A
{
private:
    T b;

public:
    A(): b(0) {}
    const T& value() const { return b; }

    template<typename U>
    bool operator==(const U& compare) { return compare.value() == b; }
};

然后只要:

  1. 比较U对象类型有一个名为value()的方法,可以调用它来获取它的内部私有“值”
  2. 无论U::value()类型返回哪种类型都可比较(并可隐式转换)为您的模板T类型
  3. 你很好。否则你会得到一个编译器错误抱怨这两点之一。