Определить, встроен ли size_t с препроцессором g ++

Объявления Mac OS / X используют встроенную size_t как в:

typedef __SIZE_TYPE__ size_t;

Что делает size_t тип, который отличается от любого другого типа (например, unsigned long). Это верно для PPC и amd64.

При компиляции с i386 мы получаем обычное:

typedef unsigned long size_t;

так что это работает как ожидалось для остальной части моего развития. Однако когда size_t определяется с внутренним типом, я должен добавить объявление в мой класс.

Поэтому мне нужно знать, должно ли класс иметь это определение. Что-то вроде этого:

class my_class
{
...
void func(unsigned long ul);
#if SIZE_T_BUILTIN
void func(size_t s);
#endif
...
};

Что бы SIZE_T_BUILTIN правильно определить, что size_t имеет свой собственный тип?

В настоящее время мне нужно только это для g ++.

1

Решение

Вместо того, чтобы определить, size_t это один из типов, о котором вы знаете, вы можете просто определить его, если это не тот тип, для которого вы уже перегружены, например:

void func(unsigned long);
template <typename T>
std::enable_if<!std::is_same<size_t, unsigned long>::value
&& std::is_same<T, size_t>::value>::type func(T);

Это можно сделать ли func() член или нет. Основная хитрость заключается в том, чтобы сделать условную перегрузку шаблоном функции, чтобы вы могли использовать SFINAE для ее условного отключения.

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector