c++ - 未知类型的可变参数构造函数参数列表

标签 c++ vector initialization variadic

假设我有一个类旨在表示任何维度的典型数学 vector 。我想设计此类,使其构造函数接受任意数量的参数,将这些参数转换为 long double 类型,然后按照它们在参数列表中提供的顺序将它们插入到“point_list” vector 中。

class Pvector
{
  private:
  std::vector<long double> point_list;

  public:
  // some magic constructor here
};

现在,如果所有参数都属于同一类型,这并不困难,因为我可以只使用一个初始化列表。但问题是任何参数都可能是不同类型的,这仍然需要接受任意数量的参数(至少一个)。本质上,我正在尝试能够像这样使用构造函数:

int i;
float j;
double k;
long double l;

Pvector vec1(i, j, k, l);
Pvector vec2(k-i, 5, j);
Pvector vec3(i, i, j, j, k, k, l, l);
etc...

我只是不确定是否可以让可变参数构造函数接受多种类型,然后在将它们插入 vector 之前将它们隐式转换为长 double 值。是否有可能实现这一点,或者如果我想要一个可变参数构造函数,我的所有参数都必须是同一类型吗?

最佳答案

你可以这样做:

class Pvector
{
public:
  template <typename ...Ts>
  Pvector(Ts && ...ts)
  {
    point_list.reserve(sizeof...(Ts));
    init(std::forward<Ts>(ts)...);
  }

protected:
private:
  void init() { };

  template <typename ...Ts>
  void init(long double x, Ts && ...ts)
  {
    point_list.push_back(x);
    init(std::forward<Ts>(ts)...);
  }

  std::vector<long double> point_list;
};

关于c++ - 未知类型的可变参数构造函数参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45882965/

相关文章:

c++ - 在 C++ 中使用两个 if 有区别吗

c++ - 这些叫什么

c++ - 错误:预期在 ‘.’ token 之前的不合格 ID - std::vector

javascript - 在javascript中旋转向量

c - 如何只初始化字符数组的一部分?

java - 为什么初始化数组的时间不同

c++ - 如何将json对象转换为QObject?

c++ - 将字符串解析为不区分大小写的 protobuf 枚举

c++ - 使用整数参数定义 vector <string> 时 '{' 和 '(' 之间的差异?

c++ - 表达式的有效值是什么 (uninitialized_bool ? 1 : 2)?