【发布时间】:2012-07-16 17:18:39
【问题描述】:
我想用使用可变参数模板参数生成的模式初始化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;
}
非常感谢您的宝贵时间!
【问题讨论】:
-
鼓励您在找到问题的答案后将其发布。 :)
-
好的,我写了解决方案作为答案。
标签: c++ templates c++11 template-meta-programming constexpr