让我说:(这个课还可以)
class CCheckSystemEndianess
{
private:
int i;
char checker[sizeof(int)];
public:
CCheckSystemEndianess() : i(1) { }
bool isLittleEndian() { return (checker[0] != 0); }
};
但这个行为很奇怪
template <bool checker>
class CEndian
{
private:
template <typename T>
T swapEndianess (const T& value)
{
if (CCheckSystemEndianess().isLittleEndian() == checker)
{
return value;
}
.................
主要问题是,如果我以不同的方式创建CEndian,我会得到与CCheckSystemEndianess()不同的结果.isLittleEndian()
对于前。
CEndian<false> *p_endian = new CEndian<false>();
然后这一行成为
CcheckSystemEndianess().isLittleEndian() = false
但是如果我像这样创建CEndian
std::unique_ptr<CEndian<false> > p_endian (new Cendian<false>());
然后这条线就变成了
CcheckSystemEndianess()。isLittleEndian()= true。
是的如果我在CEndian类中创建CCheckSystemEndianes一切顺利
template <typename T>
T swapEndianess (const T& value)
{
std::unique_ptr<CCheckSystemEndianess> endianCheck(newCCheckSystemEndianess);
checkSystemEndianess()。isLittleEndian()智能和原始指针的两种方式都是真的....
我有点困惑......
编辑: 感谢Cubbi指出CCheckSystemEndianess必须是union而不是class。
答案 0 :(得分:2)
在CCheckSystemEndianess中,i
和checker
是两个不相关的对象。构造函数写入1
的值i
与checker
的内容无关,这些内容仍然未初始化。
也许你的意图是建立一个联盟?