【问题标题】:Variadic-templates class constructor可变参数模板类构造函数
【发布时间】:2018-05-18 11:41:48
【问题描述】:

我编写了以下代码来创建一个带有构造函数的类,该构造函数将整数的变量数 (N) 加上两个双精度数作为参数,如下所示:

#include <cstdio>
#include <cstdlib>

#include <vector>
#include <array>

template <std::size_t N>
class point_t {

public:

  std::vector<int> values;

  template<typename ... Args>
  point_t(Args ... args, double distance, double value) {

    std::array<int , N> list = {(args)...};

    for(std::size_t i=0; i<N; ++i) values[i] = list[i];

  }

};


int main(int argc, char *argv[]) {

  point_t<4> test(1, 2, 3, 4, 3.0, 6.7);

  return 0;

}

编译器返回以下错误:

'point_t'的初始化没有匹配的构造函数
候选构造函数不可行:需要 2 个参数,但提供了 6 个

我错过了什么?

【问题讨论】:

    标签: c++ c++11 variadic-templates variadic-functions variadic


    【解决方案1】:

    我错过了什么?

    只有在最后一个位置才能推导出可变参数包。

    所以

    template<typename ... Args>
    point_t(double distance, double value, Args... args)
    

    工作和

    template<typename ... Args>
    point_t(Args ... args, double distance, double value) {
    

    没有。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-02
      • 2015-05-06
      • 2016-01-02
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多