STLPort с использованием C ++ 11

Я пытаюсь перенести мой офисный код с C ++ на C ++ 11, и мы интенсивно используем STLPorts.

Есть макрос компилятора (http://www.stlport.org/doc/configure.html) — _STLP_LONG_LONG, который используется в нашем коде и отлично работает в C ++.

Однако в C ++ 11 это не определено.

#if defined (_STLP_LONG_LONG)
// Doesn't come here

Как я могу это исправить? Я пытался искать в Интернете, но ресурсы очень ограничены.

Изменить: вот код

# if defined (_STLP_MSVC) || defined (__BORLANDC__) || defined (__ICL)
# define ULL(x) x##Ui64
typedef unsigned _STLP_LONG_LONG uint64;
# elif defined (_STLP_LONG_LONG) /// <---- Here
typedef unsigned _STLP_LONG_LONG uint64;
# define ULL(x) x##ULL
# elif defined(__MRC__) || defined(__SC__)              //*TY 02/25/2000 - added support for MPW compilers
# include "uint64.h"            //*TY 03/25/2000 - added 64bit math type definition
# else
#  error "there should be some long long type on the system!"#  define NUMERIC_NO_64 1
# endif

Насколько я понимаю, код пытается найти тип long long для данной платформы. В случае с pre C ++ 11 на linux g ++ переходит на указанную строку. Но когда я выполняю g ++ -std = c ++ 11 …, g ++ пропускает эту строку и переходит к ошибке «В системе должен быть тип long long long song!»

0

Решение

Похоже, что STLPorts не поддерживает C ++ 11.

Если ваш код требует C ++ 11, то вам не нужно использовать _STLP_LONG_LONG вообще, так как long long является стандартным.

Если ваш код должен работать и в более старом C ++, вы можете определить свой собственный макрос, который работает с C ++ 11, как и следовало ожидать:

#if __cplusplus >= 201103L
#define MY_LONG_LONG long long
#elif defined(_STLP_LONG_LONG)
#define MY_LONG_LONG _STLP_LONG_LONG
#endif

Конечно, если ваш код должен работать в стандарте, предшествующем C ++ 11, то вам также может понадобиться справиться с ситуацией, когда компилятор не предоставляет long longрасширение языка, т.е. #ifdef MY_LONG_LONG чтобы проверить, можете ли вы использовать его.

РЕДАКТИРОВАТЬ: Для вашего определения, вы, вероятно, должны использовать std::int64_t вместо long long если вам нужен тип шириной 64 бита, как long long технически может быть шире 64 бит.

5

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

Других решений пока нет …

По вопросам рекламы [email protected]