Допустим, у меня есть: (этот класс в порядке)
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.
И да Если я создаю CCheckSystemEndianes внутри класса CEndian, все идет хорошо
template <typename T>
T swapEndianess (const T& value)
{
std::unique_ptr<CCheckSystemEndianess> endianCheck(newCCheckSystemEndianess);
checkSystemEndianess () .isLittleEndian () оба способа с умным и с необработанным указателем становятся правдой ....
Я немного запутался там ..
Редактировать: Спасибо Cubbi за указание на то, что CCheckSystemEndianess имеетбыть союзом, а не классом.