C++ 包括模板化的C++;在目标C中
我尝试将一个C++库与相当多的模板包含到一个目标C应用程序中。 它似乎总是被共享库中的一些内联语句阻塞:C++ 包括模板化的C++;在目标C中,c++,objective-c,templates,C++,Objective C,Templates,我尝试将一个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; } 我正在使用选项进行编译 g++ -x objective-c++ -Wall -O
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; }
我正在使用选项进行编译
g++ -x objective-c++ -Wall -O3 -I. -c demod_gui.m -o demod_gui
所有其他模板似乎都编译得很好,你知道这里有什么问题吗?提前感谢您的帮助。在
Foundation/NSObjCRuntime.h
中已经定义了宏MIN
和MAX
#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
#如果!已定义(最小值)
#定义最小值(A,B)({uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuub=(B);\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuub=(B)})
#恩迪夫
#如果!已定义(最大值)
#定义MAX(A,B)({{uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuub=(B)}
#恩迪夫
所以你的定义变成了
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; }
模板
内联T({uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuua=(ta);{uuuuuuuuuuuuuuuuuuuub=(tb);{uuuuuuuuuu ab?b:a;}
这显然是无效的
为什么不使用和
std::min
?出于好奇,为什么共享库定义自己的min和max函数?这些都包含在我提到的
中,MIN
和MAX
可能是在其中一个objc++头中定义的。如果是这样的话,那么它可能会破坏你的模板定义。当我发表评论时,这个答案并不存在!我发誓-_-这正是问题所在,添加了一个\ifndef\uuu OBJC\uuu
来修复共享库。
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; }