打印对象名称而不是内存地址

Print object name instead of memory address?

本文关键字:内存 地址 对象 打印      更新时间:2023-10-16

假设我有一个名为Foo()的类对象,并且想通过将打印函数传递给Foo对象来返回Foo的名称,而不是通过Foo.name。例如:

class Object
{
public:
    Object();
    ~Object();
    const char* name;
};
然后

Debug.Log(myObject) //Should print the object name

这叫什么,我怎么做?起初我想做一个操作符重载,但是没有操作符重载。或者有吗?

可能有不同的方法:

1)通常的方法是重载operator<对于每个需要被记录的对象,并在标准流中使用它。>

class Object
{
public:
    // ...
    friend std::ostream& operator<< (std::ostream& stream, const Object& obj) {
        [...]
    }
};

它有很多优点,包括:

  • 链接呼叫的可能性
  • 可用于任何类型的流
  • STL友好

2)如果你想坚持你的设计,为所有"Printable"对象提供一个纯基类

class Printable{
    virtual void Print() = 0;
}

让你的Debug.Log函数接受Printable作为参数

void Log(const Printable& obj)
{
  obj.Print();
}

理想情况下,您应该传递std::ostream作为Print()函数的参数