Объявления 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 ++.
Вместо того, чтобы определить, 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 для ее условного отключения.