【发布时间】:2017-04-04 11:08:19
【问题描述】:
是否可以在某一点声明一个 const 数组(可能是 constexpr),然后在另一个地方定义它,一次一个元素?
例如
extern constexpr int myArray[100];
myArray[0] = myConstexprFunction(0);
myArray[1] = myConstexprFunction(1);
// ...
myArray[100] = myConstexprFunction(100);
我正在尝试做的事情需要这样的东西。也许可以使用以下内容:http://b.atch.se/posts/constexpr-counter/
但是,如果这种技术在下一个 C++ 标准中是非法的(我希望不会),我想使用一种更安全的技术。
[EDIT] 放宽一些要求怎么样.. 假设我想做这样的事情:
constexpr int myConstExprFunction(int arg) { return arg + 100;}
// other code...
constexpr int a = myConstExprFunctionBegin(10);
constexpr int b = myConstExprFunction(20);
constexpr int c = myConstExprFunction(30);
constexpr int d = myConstExprFunctionEnd(40);
我想要的是 myConstExprFunctionEnd 能够使用前面函数创建的值生成最终数组。 当然,一切都在编译时进行。
[EDIT2] C++11 解决方案非常受欢迎
【问题讨论】:
-
你试过了吗?你遇到了什么错误?
-
@RichardCritten 是的,当然我已经尝试过了,但是我得到了不同类型的错误(.. 之前已经声明过.. / 冲突声明......等等)。我可以做这样的事情的唯一方法是使用模板元编程以递归方式
-
在英语中,句子以大写字母开头。
标签: c++ arrays c++11 constexpr