如果参数数量未知,如何使用模板?

时间:2013-05-15 11:17:29

标签: c++ templates arguments

我已提到link来满足我的要求。 但是当我尝试在我的代码中实现相同的内容时,它会抛出一个错误。

template<typename T, typename... Args>
void fun(T t, Args... args)
{
    cout << t;
}
int main()
{
    fun(1, 2.0, "Ranjan", "hi");//Error happens here
return 0;
}

fun()的错误为template<class T, <error type>>

这里出了什么问题?

2 个答案:

答案 0 :(得分:3)

VS2010不支持可变参数模板。见C++11 Features。根据该页面,VS2012也不支持它,因此目前升级不是解决方案。

搜索 c ++ 03模仿可变参数模板以确定是否有替代方案(此网站的一个示例:How to implement "Variadic Template" with pre-c++0x(VS2008)?)。

答案 1 :(得分:1)

问题是您只使用第一个而不是其他模板参数。 g ++警告清楚地解释了它。

此示例使用所有参数,并添加无参数的函数:

#include <iostream>

void fun()
{
    std::cout<<std::endl;
}
template<typename T, typename... Args>
void fun(T t, Args... args)
{
    std::cout << t;
    fun(args...);
}
int main()
{
    fun(1, 2.0, "Ranjan", "hi");//Error happens here
}