C++模板可移植性

JT.*_*JT. 4 c++ templates

我正在更新一个10年前的代码库,并在Mac和Windows上使用Metrowerks Code Warrior.

我正在更新到OS X,XCode 3.2,Universal Binary.

我似乎得到了很多模板相关的错误,而不是模板上的天才(并且忘记在早餐时吃健康剂量的磨砂模板),我发现自己对模板可移植性问题感到疑惑.

IIRC,模板是/或可以是编译器特定的?

有没有人对他们推荐的模板有建议或教程?

Jer*_*fin 5

是和否 - 为一个当前编译器编写的最合理的模板代码可以在其他当前编译器上正常工作.随着时间的推移,编译器已经取得了进展,因此许多新代码无法在旧编译器上运行,反之亦然.在新编译器上使用旧代码的最大罪魁祸首是在很多地方需要"typename",旧的编译器会接受没有它的代码.

最常见的问题是代码是这样的:

template <class T>
class XYZ { 
    T::y a;
};
Run Code Online (Sandbox Code Playgroud)

大多数较旧的编译器会(错误地)将"T :: y"解释为类型 - 但在模板中,实际上不可能确定这一点,因为T可能是任何类型.要使代码与现代(更准确)编译器一起工作,您需要将其更改为:typename T::y a;,让编译器知道这T::y是类型的名称.