我有一个界面IOperand
:
class IOperand
{
public:
virtual IOperand * operator+(const IOperand &rhs) const = 0;
virtual std::string const & toString() const = 0;
}
和班级Operand
:
template <class T>
class Operand : public IOperand
{
public:
virtual IOperand * operator+(const IOperand &rhs) const;
virtual std::string const & toString() const;
T value;
}
类IOperand
和成员函数operator+
和toString
原型不能被修改。成员函数 operator+ 必须添加 2 中包含的 2 个值IOperand
。我的问题是这个值可以是 int、char 或 float,但我不知道如何使用模板来做到这一点。我试过这个:
template <typename T>
IOperand * Operand<T>::operator+(const IOperand &rhs) const
{
Operand<T> *op = new Operand<T>;
op->value = this->value + rhs.value;
return op;
}
我的toString
方法:
template <typename T>
std::string const & Operand<T>::toString() const
{
static std::string s; // Provisional, just to avoid a warning for the moment
std::ostringstream convert;
convert << this->value;
s = convert.str();
return s;
}
但是编译器没有找到this->value
,rhs.value
因为它们不在IOperand
.
编辑:作为评论中的建议,我在 and 中添加了该方法toString
,我真的不知道它是否有帮助。Operand
Ioperand