打印对象名称而不是内存地址
Print object name instead of memory address?
假设我有一个名为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()函数的参数
相关文章:
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 使用内存地址访问结构的属性值
- 为什么C++总是显示十六进制内存地址,而不仅仅是整数?
- 将布局映射到内存地址
- 为什么同一个变量的内存地址不同?
- 无法将内存地址转换为值
- 给定特定内存地址的数组的动态内存分配
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 获取 R 数据帧的内存地址
- c++ 编译器是否保护常量内存地址免受任何更改?
- 如何防止矢量的内存地址更改
- cout 打印内存地址而不是值
- 如何运行外部程序,向其传递内存地址以读取/写入?
- 循环中的变量被设置为下一个数组的元素始终具有相同的内存地址?
- 重载 ostream << 运算符,指针作为参数,导致输出上的内存地址
- C++在变量的内存地址上做什么来"deallocate"它?
- 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- 为什么我无法获取 MSVS2019 / C++ 中字符或uint8_t变量的内存地址?