在Objective C中包含模板化C++

Ste*_*ehl 2 c++ templates objective-c

我正在尝试将包含相当多模板的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; }
Run Code Online (Sandbox Code Playgroud)

产出输出:

expected unqualified-id before '{' token
expected `)' before '{' token
Run Code Online (Sandbox Code Playgroud)

我正在编译选项.

g++ -x objective-c++ -Wall -O3 -I. -c demod_gui.m -o demod_gui
Run Code Online (Sandbox Code Playgroud)

所有其他模板似乎编译得很好,任何想法在这里可能是错的?在此先感谢您的帮助.

ken*_*ytm 9

已经有宏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
Run Code Online (Sandbox Code Playgroud)

所以你的定义变成了

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; }
Run Code Online (Sandbox Code Playgroud)

这显然是无效的.

为什么不使用std::max和std::min?