我想constexpr
用使用可变参数模板参数生成的模式初始化一个数组。为简单起见,考虑使用constexpr unsigned
类型列表的大小初始化静态数组的问题,例如unsigned, short, char, int, long
. 我怎样才能做到这一点,以便在编译期间完成所有计算?我需要解决方案才能很好地使用 C++ 类型系统,所以我不能使用宏。
我能想到的最好的结果如下所示,但使用 并且工作正常。g++ -std=c++11 -Wall -Ofast -S
(使用 g++ 4.7)进行编译和检查程序集清楚地表明,这些值在运行时被推入堆栈。有任何想法吗?
如果我能以某种方式告诉扩展n +1关于扩展n,则使用如下的数组初始化程序将起作用。
static constexpr unsigned foo[] = { compute_element<Args>::value... };
编辑:等等,没关系,我脑子有问题。上面的行工作正常......
这是代码答案:
#include <iostream>
template <class... Args>
struct foo
{
static constexpr unsigned bar[] = { sizeof(Args)... };
};
int main()
{
std::cout << foo<unsigned, short, char, int, long>::bar[2] << std::endl;
return 0;
}
非常感谢您的宝贵时间!