我正在制作一些堆栈,我需要在某些函数中使用这种比较。但我陷入了困境,因为我不知道原型应该是什么样的。
我在函数中有以下行。
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 == '#''
答案 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);
};