gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:09:58 28 4
gpt4 key购买 nike

假设我有一个类旨在表示任何维度的典型数学 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com