关于重载运算符operator ()
template <typename T>
Wrapper<T>::operator T const& ()const
{
return m_data;
}//m_data是Wrapper类的一个成员变量
然后我要想在程序中得到m_data的值,应该怎么调用这个重载的运算符。
下面是类的声明。
template <typename T>
class Wrapper : public Object
{
public:
Wrapper();
Wrapper(T const &data);
Wrapper(Wrapper const &wrapper);
Wrapper& operator = (T const &data);
Wrapper& operator = (Wrapper const &wrapper);
//强制类型转换重载,注意格式,语法
operator T const& () const; // To be revised.
T const& WrappedData()const;
HashValue Hash() const;
void Put(ostream &os) const;
protected:
T m_data;
int CompareTo(Object const &robj) const;
};
我是这样用的,但是总是报错:提示没有 <<的右操作数为Object类
typedef Wrapper<int> Int;
StackAsArray stack(5);
stack.Push(*new Int(3));
stack.Push(*new Int(4));
stack.Push(*new Int(5));
stack.Push(*new Int(6));
cout << stack.Pop() << endl;
其中StackAsArray的类声明是:
class StackAsArray : public Stack
{
private:
class Iter;
public:
StackAsArray(unsigned int size);
void Purge();
~StackAsArray();
void Push(Object &obj);
Object& Pop();
Object& Top() const;
Iterator& NewIterator() const;
friend class Iter;
void Accept(Visitor &visitor) const;
protected:
int CompareTo(Object const &robj) const;
private:
Array<Object*> m_array;
};
class Stack : public virtual Container
{
public:
virtual Object& Top() const = 0;
virtual void Push(Object&) = 0;
virtual Object& Pop() = 0;
};