假设我有一个名为Foo()的类对象,并希望仅通过将我的print函数传递给Foo对象而不是通过Foo.name来返回Foo的名称。例如:
class Object
{
public:
Object();
~Object();
const char* name;
};
然后
Debug.Log(myObject) //Should print the object name
这甚至叫什么,我该怎么办?起初我想过做一个操作符重载,但没有操作符为此重载...或者是否存在?
答案 0 :(得分:1)
可能采用不同的方法:
1)对于每个必须记录的对象,通常的方法是overload operator<<,并在标准的ostream上使用它。
class Object
{
public:
// ...
friend std::ostream& operator<< (std::ostream& stream, const Object& obj) {
[...]
}
};
它有许多优点,包括:
2)如果你想坚持你的设计,为所有“可打印”对象提供一个纯粹的基类
class Printable{
virtual void Print() = 0;
}
让Debug.Log函数将Printable作为参数
void Log(const Printable& obj)
{
obj.Print();
}
理想情况下,您可以将std :: ostream作为Print()函数的参数传递