【发布时间】:2014-05-17 15:34:32
【问题描述】:
在模板类中,我使用以下内容重载了 ostream
friend std::ostream& operator<<(std::ostream &out,
const DataItem<T> &cDataItem) {
out << cDataItem.m_value;
return out;
}
而m_value 被声明为指向泛型类型的指针
T *m_value;
但由于某种原因,当我计算对象时,它会打印一个十六进制值,我猜这是地址而不是值,正如我所料:
Value: 0x7fff418f9d40
我了解到带有 char* 的 cout 应该打印 char* 的内容,而不是地址。那为什么会这样呢?模板有问题吗?
【问题讨论】:
-
试试
out << *(cDataItem.m_value) ; -
除非
T是char或const char,否则cout的行为是正确的。 -
如果你认为
T应该是char然后发布一个测试用例。到目前为止没有提供足够的信息。 -
代码可以在Github 获得,但我想在这里发布的时间很长。 @MichaelWalz 它不起作用并打印了一个奇怪的字符串
�s��。 @RSahu T 是char[40]。 -
@ranisalt:使用
std::string而不是char[40]。或使用std::vector<char>,或std::array<char,40>。
标签: c++ templates pointers iostream cout