模板类和重载'=='

时间:2010-12-08 20:56:59

标签: c++ templates operator-overloading

我正在制作一些堆栈,我需要在某些函数中使用这种比较。但我陷入了困境,因为我不知道原型应该是什么样的。

我在函数中有以下行。

template <class T>
void function1(T i)
{
   if(i == 'a')
       //do something
}

我想知道过载原型应该是什么样的吗?

修改 Dunno如果值得一提,无论如何这是我迄今为止所尝试过的 模板

bool Stack<T>::operator==(char c) const
{
    cout << c << endl; // just some test
}

无需评论此功能的工作原理,因为我还没有完成。这部分将编译,但是在我第一次调用此函数的部分是在Stack :: push(T i)中。编译器会抱怨没有匹配功能。

 error: no match for 'operator==' in 'i == '#''

3 个答案:

答案 0 :(得分:1)

对于重载运算符,函数的名称为operator,后跟实际运算符,因此operator==。它返回bool。我不知道你的论据应该基于你的代码。可能是Stack<T>&,你需要两个来比较它是否是一个自由函数,如果它是一个成员函数则需要与之比较。

如果您有办法转换为Stack<T>,那么请选择免费功能,以便转换左侧。

答案 1 :(得分:0)

我不确定我理解你的问题。为了使模板函数function1的实例化格式正确,您必须提供operator==来比较T和(我猜想)a {{1} }}

现在,您有两个选择:

  • 在您的类型中提供char成员函数,例如:

    bool operator==(char) const
  • 提供struct A { bool operator==(char) const { /* ... */ } }; function1(A()); // OK : comparison uses A::operator==(char) 作为免费功能,例如:

    bool operator==(const T &, char)

答案 2 :(得分:0)

因此,function1(t)中的每个T都必须实现operator ==;

例如,作为成员函数

class A
{
public:
   bool operator == (char) const;
};

或非会员运营商:

class A
{
public:
   friend bool operator == (const A&, char);
};