【问题标题】:How to use template when number of arguments are not known?当参数数量未知时如何使用模板?
【发布时间】:2013-05-15 11:17:29
【问题描述】:

我已推荐此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&lt;class T, &lt;error type&gt;&gt;

这里出了什么问题?

【问题讨论】:

  • 对我来说编译得很好(有一些警告),并且执行得很好。错误是什么?
  • 用 g++ (ideone.com/iqHvqW) 编译得很好。您正在使用什么编译器以及如何使用?在 c++11 中添加的可变参数模板。
  • 你启用c++11标志了吗? (例如-std=c++11)?
  • @iammilind: 我用的是visual studio 2010 终极版
  • @RasmiRanjanNayak,不支持可变参数模板,仅支持 c++11 功能的子集。

标签: c++ templates arguments


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    问题是您只使用了第一个,而不是其他模板参数。 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
    }
    

    【讨论】:

      猜你喜欢
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多