2011-05-25 32 views
3

我有一个uint8类型成员的类,当我尝试将它输出到一个ostream时,它显示为char表示。我宁愿它是int表示,所以我需要每次都有static_cast(myStruct.member),这有点麻烦并且容易出错。有任何想法吗?把uint8作为一个int自动显示给一个ostream

+1

有趣的问题。我不确定你可以为这样的本地类型重载'<<'运算符,但也许你可以重载'<<'来支持显示你的特定结构? – ereOn 2011-05-25 13:38:14

+0

在考虑了这个问题之后,我可以重写operator << for uint8,但是我担心代码库其余部分的副作用。如果只有一种方法可以将覆盖的范围限制到我的特定命名空间或文件,那就没问题了。 – chriskirk 2011-05-25 14:43:04

+0

我建议不要这样做,以前犯过这个错误。 :( – bheeshmar 2011-05-26 21:48:24

回答

1

实现你的类operator<<并定义投那里。对我来说就像你违反封装。

0
class X { 
    uint8 a; 
    int get_int() const { return static_cast<int>(a); } 
}; 

我们使用封装方法封装铸件内部。 用法:

cout << obj.get_int(); 
+1

即使调用可能被内联,如果'a'最好表示为'int',为什么它不是一个'int'呢? – ereOn 2011-05-25 13:41:54

+0

@ereOn,同意。但可能是OP想要呈现'int'格式仅用于显示目的 – iammilind 2011-05-25 13:43:43

+0

确实如果目的只是“显示”,不会'std :: string'更适合而不是'int'吗?('boost :: lexical_cast < >'会在那里帮助) – ereOn 2011-05-25 13:45:21