【发布时间】:2013-05-25 04:22:39
【问题描述】:
我有以下代码可以正常工作:
list <Politician> MakeList ( int num, ... ){
va_list arguments;
va_start ( arguments, num );
list <Politician> PoliticianList;
for ( int x = 0; x < num; x++ ) {
PoliticianList.push_back(va_arg (arguments, Politician));
}
va_end ( arguments );
return PoliticianList;
}
但是,当试图使其通用时:
template<class TYPE>
list <TYPE> MakeList ( int num, ... ){
va_list arguments;
va_start ( arguments, num );
list <TYPE> PoliticianList;
for ( int x = 0; x < num; x++ ) {
PoliticianList.push_back(va_arg (arguments, TYPE));
}
va_end ( arguments );
return PoliticianList;
}
编译时出现如下错误:
error C2783: 'std::list<TYPE> MakeList(int,...)' : could not deduce template argument for 'TYPE'
我怎样才能使它通用,这样我就不必为不同的类对象重新实现?
【问题讨论】:
-
你是怎么调用那个函数的?
-
如果你有 C++11,可变参数模板会是更好的选择。
-
你必须说
MakeList<Foo>(3, foo1, foo2, foo3)。 -
我无法重现您的问题:Live Code。你是如何使用
MakeList的? -
MakeList
(3, foo1, foo2, foo3)