可以在编译时定义静态数组,如下所示:
const std::size_t size = 5;
unsigned int list[size] = { 1, 2, 3, 4, 5 };
Run Code Online (Sandbox Code Playgroud)
问题1 - 是否可以通过使用各种元编程技术在编译时"以编程方式"分配这些值?
问题2 - 假设数组中的所有值都是相同的barr,是否可以在编译时以编程方式选择性地分配值?
例如:
const std::size_t size = 7;
unsigned int list[size] = { 0, 0, 2, 3, 0, 0, 0 };
Run Code Online (Sandbox Code Playgroud)
更新: Georg Fritzsche的解决方案非常棒,需要一些工作才能在msvc和intel编译器上进行编译,但这仍然是解决问题的一种非常有趣的方法.
我正在初始化一个包含数千个设置值的大型数组。我希望这些值在编译时设置,而不是在运行时设置,因为它们是固定的并且不会更改。
是否有可能使用预处理器自动生成这些值的方法?目前,我正在使用另一个小程序生成这些值,然后分别简单地复制和粘贴这些值。
这是我生成的:
class MyClass
{
public:
MyClass(int x, int y, int z) : X(x), Y(y), Z(z) {}
int X, Y, Z;
};
std::vector<MyClass> my_vector{
#include "my_vector_default_values.h"
};
Run Code Online (Sandbox Code Playgroud)
my_vector_default_values.h
MyClass(0, 0, 1),
MyClass(0, 0, 2),
MyClass(0, 0, 3),
MyClass(0, 0, 4),
// etc... for thousands of lines
// ...
Run Code Online (Sandbox Code Playgroud)
编辑:
我生成的实际值生成如下(这是C#程序):
var sb = new StringBuilder();
var sizeX = 32;
var sizeY = 32;
var sizeZ = 32;
for (var x = 0; x < sizeX; x++)
{
for (var …Run Code Online (Sandbox Code Playgroud)