gpt4 book ai didi

c++ - 模板化 vector 的构造函数(数学类)

转载 作者:搜寻专家 更新时间:2023-10-31 00:10:06 25 4
gpt4 key购买 nike

对于我想从事的小型软件渲染器项目,我需要不同类型的 vector ,所以我想我应该将它们模板化。

template<typename T, size_t dim> struct Vector {
std::array<T, dim> data;

Vector(){
data = { 0 };
}
}

这适用于空 vector ,例如:

Vector<int, 3> v;

但是我怎样才能创建一个构造函数来接受这样的语法:

Vector<int, 3> v(1, 2, 3);

认为 std::initializer_list 可以像这样工作:

Vector(std::initializer_list<T> values){
data = values;
}
Vector<int, 3> v({1, 2, 3});

但是编译器说在 std::arraystd::initializer_list({1, 2, 3}) 语法看起来也有点笨拙。

最佳答案

您可以使用可变参数模板:

template <typename ... Ts>
Vector(Ts&&... args) : data{{std::forward<Ts>(args)...}}
{}

可能有一些 SFINAE 将此构造函数限制为大量 args,并且 args 可转换为 T。

关于c++ - 模板化 vector 的构造函数(数学类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39901102/

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