Включение шаблонного C ++ в Objective C - PullRequest
2 голосов
/ 09 июля 2010

Я пытаюсь включить библиотеку C ++ с большим количеством шаблонов в целевое приложение C.

Кажется, что он постоянно захлебывается несколькими встроенными операторами в общей библиотеке:

template <class T>
inline T MIN(T a, T b) { return a > b ? b : a; }

template <class T>
inline T MAX(T a, T b) { return a > b ? a : b; }

получая вывод:

expected unqualified-id before '{' token
expected `)' before '{' token

Я компилирую с опциями.

g++ -x objective-c++ -Wall -O3 -I. -c demod_gui.m -o demod_gui

Все остальные шаблоны, кажется, компилируются нормально, есть идеи, что здесь может быть не так?Заранее спасибо за любую помощь.

1 Ответ

9 голосов
/ 09 июля 2010

Уже есть макросы MIN и MAX, определенные в Foundation/NSObjCRuntime.h.

#if !defined(MIN)
    #define MIN(A,B)    ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __a : __b; })
#endif

#if !defined(MAX)
    #define MAX(A,B)    ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __b : __a; })
#endif

Итак, ваше определение становится

template <class T>
inline T ({ __typeof__(T a) __a = (T a); __typeof__(T b) __b = (T b); __a < __b ? __a : __b; }) { return a > b ? b : a; }

что явно неверно.

Почему бы не использовать std::max и std::min?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...