は私が持っていると言うことができます異なる結果を取得します(このクラスはOKです)C++生またはスマートポインタとテンプレート関数の作成が
class CCheckSystemEndianess
{
private:
int i;
char checker[sizeof(int)];
public:
CCheckSystemEndianess() : i(1) { }
bool isLittleEndian() { return (checker[0] != 0); }
};
しかし、この1は、主な問題があることである
template <bool checker>
class CEndian
{
private:
template <typename T>
T swapEndianess (const T& value)
{
if (CCheckSystemEndianess().isLittleEndian() == checker)
{
return value;
}
.................
奇妙な行為します私がCCndSystemEndianess()で異なる結果を得る方法をCEndianで作成すると、isLittleEndian()
のようになります。
CEndian<false> *p_endian = new CEndian<false>();
は、この行は
CcheckSystemEndianess().isLittleEndian() = false
になります。しかし、私はこの
std::unique_ptr<CEndian<false> > p_endian (new Cendian<false>());
ようCEndianを作成する場合は、この行は CcheckSystemEndianess()となります。isLittleEndian()が真=。
そして、私はCEndianクラス内CCheckSystemEndianesを作成する場合は[はい、すべてがOK
template <typename T>
T swapEndianess (const T& value)
{
std::unique_ptr<CCheckSystemEndianess> endianCheck(newCCheckSystemEndianess);
checkSystemEndianess(行く)。isLittleEndian()スマートと生のポインタが真なるとの両方の方法が....
私はそこに少し混乱しました..
編集: CCheckSystemEndianessはクラスではないことを指摘してくれたCubbiに感謝します。
実際にはいです。私は組合について考えていたが、クラスを作った。 – legion
これをコンストラクタと組み合わせることもできます... – dascandy