我正在从 Windows 移植一些模板代码,并且在 iPhone 3.2 SDK 上遇到了一些编译器差异。
类模板的成员函数中的原始代码是:
return BinarySearch<uint32, CSimpleKey<T> >(key);
其中 BinarySearch 是从另一个模板继承的方法。
这会产生以下错误:
csimplekeytable.h:131: error: no matching function for call to 'BinarySearch(NEngine::uint32&)'
Visual Studio 编译器似乎可以很好地遍历模板层次结构,但 gcc 需要我完全限定函数的来源(我已经通过修复模板成员变量的相同问题来验证这一点)。
所以我现在需要将其更改为:
return CSimpleTable<CSimpleKey<T> >::BinarySearch<uint32, CSimpleKey<T> >(key);
现在产生以下错误:
csimplekeytable.h:132: error: expected primary-expression before ',' token
csimplekeytable.h:132: error: expected primary-expression before '>' token
经过一番摸索,我相信这里发生的事情是它试图将 BinarySearch 之前的“<”解析为“小于”运算符,出于某种原因。
所以有两个问题: - 我对错误的解释是否走在正确的道路上?- 我如何解决它?
-D