有没有一种方法可以基于命令行参数来定义数组大小?运行时间与编译时间实例化?

鳄鱼

我有一个size的全局数组DIMENSIONSDIMENSIONS是一个静态全局变量。我可以更改硬编码DIMENSIONS变量,而不会在编译或执行中出现问题,但是有没有办法在编译时与运行时确定该值?

const static unsigned int DIMENSIONS = 2;
std::array<double, DIMENSIONS> arr;

// ...
// ...
// ...

int main (int argc, char* argv[]) {
    // argv[1] contains value '4'
}

如果我将DIMENSIONS非常数变为非静态,是否有办法像argv[1]在中那样重新初始化它main()arr仍然可以正确实例化?我要完成的想法:

unsigned int DIMENSIONS;
std::array<double, DIMENSIONS> arr;

// ...
// ...
// ...

int main (int argc, char* argv[]) {
    DIMENSIONS = atoi(argv[1]);
}

我想通过命令行控制程序的尺寸(用于爬山优化)。我知道数组不能具有动态大小调整,除了VLA之外,必须在编译时而不是运行时声明其大小。不过,我特别需要全局非VLA。

核桃

不,那通常是不可能的。

首先,您需要在编译时了解模板的所有实例。如果您不打算实例化可以使用的std::array<double, DIMENSIONS>每个值DIMENSIONS,那么这已经使任何解决方案都不合格。

即使已为的每个可能值实例化DIMENSIONS,也无法使全局静态std::array对象的大小发生变化。

原则上,您可以将不同std::array类型的对象放置到所占用的存储区中arr,但这需要先声明允许的最大值,然后再声明DIMENSIONS数组的大小。为了在任何地方都以正确的类型访问它,并使每个访问它的代码都以此为条件。

C ++ 17提供std::variant了封装它的方法,但是仅使用C ++ 11时,它看起来就不太好了(至少没有boost的帮助),所以我跳过了它。

但是最后,它将变得太复杂,并且将生成非常大的二进制文件。您应该只使用std::vector而不是std::array

如果您想为允许任意值DIMENSIONS,那么这将是不可能的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有一种方法可以将命令行参数读入Gretl脚本中?

有没有一种方法可以锁定命令行?

有没有一种方法可以处理Window的命令行错误?

有没有一种方法可以在运行时查找Eclipse编译的C二进制文件的大小?

有没有一种方法可以通过函数调用的参数来定义数组?

有没有一种方法可以在每次计划的流程运行时更新参数?

当使用`docker run-rm`时,有没有一种方法可以找到容器的运行时间

有没有一种方法可以在调用main函数之前解析命令行选项?

有没有一种方法可以从命令行指定要用于Ant的JVM?

GitLab:有没有一种方法可以保护分支不受命令行影响?

有没有一种方法可以通过命令行上传到box.com存储?

有没有一种方法可以在命令行上报告git贡献?

有没有一种方法可以“扩展” svn命令行来预处理源文件

有没有一种方法可以使用命令行执行全局热键?

有没有一种方法可以直接使用命令行分叉存储库?

有没有一种方法可以在Linux上的命令行中检测当前的工作区?

有没有一种方法可以在运行时获取属性的声明方法/属性

有没有一种方法可以通过使用参数来选择几行?

有没有一种方法可以确定Gradle依赖项(如Eclipse IDE中)在类路径(编译和运行时)中的排序顺序?

有没有一种方法可以将参数添加为变量以从python文件内部执行命令行指令

有没有一种方法可以在运行时动态更改docker容器的CPU数量?

有没有一种方法可以在运行时添加按钮以链接CKEditor插件?

有没有一种方法可以在类图中指定运行时发生的动作

有没有一种方法可以在Android的运行时任意加载资源?

有没有一种方法可以在运行时获取DefaultProperty元数据?

有没有一种方法可以在运行时创建的Android中制作异形按钮?

有没有一种方法可以在运行时查找代码段的地址(.data,.text等)?

有没有一种方法可以在运行时调用StringGrid OnCellDraw

有没有一种方法可以使用PostSharp在运行时更改属性?