默认模板参数?

时间:2011-10-04 13:13:30

标签: c++ class templates visual-c++ parameters

我目前正在尝试使用更新的工具在C ++中创建一个旧项目:该项目已在Windows XP上使用VC71进行开发,我现在正尝试使其在{{1}上运行与Windows 7

我没有遇到任何“大问题”,但是我有一个最后的编译问题导致我找到了一些代码 - 对我来说相当模糊 - 。

以下是我遇到问题的宏(简化)示例:

VC100

错误是:

#define IMPORT_STD_PAIR( _keyClass_ ,_objectClass_)               \
 extern template struct std::pair< _keyClass_,_objectClass_ >;    \
 ...

我真的没有得到它应该做的(第二行),为模板化的类指定默认参数?

感谢您的帮助。

编辑: @Mark B:谢谢你的回答。你让我意识到发生了什么:没什么。

事实上,这是我的错,因为我对Windows上的开发并不熟悉。代码最初是:

C2955: 'std::allocator' : use of class template requires template argument list.

我忽略了_import_directive_因为它在每种情况下几乎都是“空的”而只是一个。因此,当它为空时,它只是创建一个没有名称的实例,这个实例并不真正相关;但是当这个宏取值#define IMPORT_STD_MAP( _import_directive_, _keyClass_ ,_objectClass_) \ extern template struct _import_directive_ std::pair<_keyClass_,_objectClass_>; 时,它更有意义:)

感谢您帮助我实现这一点,我认为这更具异国情调,并感谢您提供有用的调试建议。

2 个答案:

答案 0 :(得分:1)

看起来ListRemake是一个模板化的类,你试图将实例实例化为

ListRemake myList;

您需要指定ListRemake

的模板参数
ListRemake<int, long> myList;

答案 1 :(得分:0)

看起来它正在尝试实例化std::pair的特定实例化。如果没有更多的上下文,我无法理解为什么会尝试这种情况,但您可能会尝试将宏定义为空,并查看代码是否编译,链接以及似乎是否有效。他们可能在10.0中更改了模板编译。