Не думаю, что я достаточно поняла, чего вы пытаетесь достичь, но ...
Если вы уверены, что sizeof(test1uni) == sizeof(test2uni) == sizeof(int)
и в структуре нет ничего другого, тогда вы можете трактовать сам finalstruct
как массив int
с:
int *ptr = (int*)&finstr;
for(int i=0; i<sizeof(finstr)/sizeof(int); i++)
printf("val: %i addr: %x\n", ptr[i], &ptr[i]);
, но как он был поднят в комментарии, приведение структуры к типу int, вероятно, нарушает строгое псевдонимы, и «наказание типов» с использованием членов union больше не разрешено явно в C ++ (в отличие от явно не разрешенного). Таким образом, это относится к области неопределенного поведения, поэтому вам необходимо:
-fno-strict-aliasing
в GCC 3.4.1 и выше. Тем не менее, все еще есть проблема с типом наказания. Также помните о других ошибках: int
должно быть кратным слову, finstr
должно быть выровнено по границе слова, компилятор / платформа должна следовать соглашению. Поэтому я бы не стал рассматривать этот портативный компьютер без более строгой строгости.
Вы не можете частично специализировать функцию. Если Вы хотите сделать так на функции членства, необходимо частично специализировать весь шаблон (да, это является раздражающим). На большом шаблонном классе, для неравнодушной специализации функции Вам было бы нужно обходное решение. Возможно, шаблонная членская структура (например, template <typename U = T> struct Nested
) работала бы. Или иначе можно попытаться произойти из другого шаблона, который частично специализируется (работы, если Вы будете использовать this->member
нотация, то иначе Вы встретитесь с ошибками компилятора).