gpt4 book ai didi

c++ - 当通过命令行参数从配置文件中指定数组的大小时,如何使用std::array?

转载 作者:行者123 更新时间:2023-12-01 14:52:58 25 4
gpt4 key购买 nike

我正在尝试使用std::array,其大小由配置文件通过C++中的命令行参数提供。

配置看起来像这样

100 // array size
... // other application parameters

即使在更简单的设置中,期望通过命令行参数(即 ./main 100)确定数组大小,这也不起作用,因为在编译时没有确定数组大小。

#include <array>                                                                                       

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

if (argc != 2)
return 1;

int n = stoi(argv[1]);

std::array<int, n> arr;
... // do my job

}

是否有使用 std::array而不是动态STL容器来做相同事情的黑客?

最佳答案

如果n的允许值集在编译时是已知的(例如110100),则可以为每个值生成代码(但是,这可能会导致代码膨胀),然后使用if s在运行时选择分支。使用C++ 17折叠表达式,可以通过以下方式实现此想法:

template<std::size_t n>
void foo_impl(/* some parameters */) {
std::array<int, n> arr;
// ...
}

template<std::size_t... ns, typename... Args>
void foo(std::size_t n, Args&&... args) {
assert(((n == ns) || ...));
((n == ns && (foo_impl<ns>(std::forward<Args>(args)...), true)), ...);
}

const std::size_t n = /* run-time value */;
foo<1, 10, 100>(n, /* some parameters */);

此处 n == ns && expr是一种众所周知的“hack”,仅当条件 expr的评估结果为 n == ns时才评估 true

关于c++ - 当通过命令行参数从配置文件中指定数组的大小时,如何使用std::array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61209291/

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