gpt4 book ai didi

c++ - 是否可以使用 C++11 中的模板元编程创建一个填充大小为 N 的零的 vector

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

我正在学习更多关于 c++ 中的模板元编程的知识,在编译时完成标准生成素数和阶乘后,我现在尝试在编译时创建 Matrix 类。它的一个子问题是创建一个大小为 N 并用零填充的 vector 。这可能与模板元编程有关吗?

我在想这样的事情。

template<int N>
struct Vec {
static std::vector<int> vec;

constexpr Vec(int count) {
for (int i = 0; i < count; ++i) {
vec.push_back(0);
}
}
};

但是编译器说“for 循环”在 constexpr 构造函数中是不允许的。有没有办法在编译时实现这样的功能。

最佳答案

A subproblem of this is to create a vector of size N filled with zeros. Is this possible to do with template meta programming?

如果使用“vector”,您的意思是“std::vector”,否:在 C++11、C++14 或 C++17 中是不可能的。也许在标准的 future 版本中;不是现在。

如果对于“vector”你接受一个“std::array”,是的:它是可能的并且非常简单(不需要初始化函数)

constexpr std::array<int, 10> a{};  // zero initialized !

我想你的 Vec 可以写成

template <std::size_t N> // better std::size_t for a size (IMHO)
struct Vec
{
std::array<int, N> vec; // no static for a member, please

constexpr Vec () : vec{}
{ }
};

但在我看来,您可以直接使用 std::array

But the compiler says that ´for-loops´ are not allowed in an constexpr constructor. Is there any way to achieve functionality like this in compile time.

编译器提示不同类型的问题:它说在 C++11 中,constexpr 函数不能包含 for 循环。

在 C++11 中,constexpr 函数只能包含(简化很多)return 指令。 constexpr 构造函数必须为空;仅初始化列表。

如果你想要一个更复杂的 constexpr 函数(里面有一个 for 循环),你需要 C++14。

关于c++ - 是否可以使用 C++11 中的模板元编程创建一个填充大小为 N 的零的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56093550/

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