正在初始化带模式的“constexpr”数组
Initializing `constexpr` Array with Pattern
我想用使用可变模板参数生成的模式初始化constexpr
数组。为了简单起见,请考虑使用类型列表(例如unsigned, short, char, int, long
)的大小初始化constexpr unsigned
静态数组的问题。我如何做到这一点,以便所有的计算都在编译时完成我需要这个解决方案来处理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;
}
非常感谢您抽出时间!
#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;
}
相关文章:
- 任意大小的 constexpr 数组是否可以用作 switch 语句中的案例?
- C++访问静态 constexpr 数组
- 从非类型模板参数声明 constexpr 数组的可移植方法
- 正在初始化函数指针的constexpr数组
- constexpr数组初始化
- 类本身内部的类对象的静态constexpr数组
- 使用模板函数初始化 constexpr 数组
- 用另一个 constexpr 数组对成员数组进行大括号初始化
- 如何将constexpr数组传递到函数中
- 在 C++11 中将静态 constexpr 数组转换为模板参数
- MSVC 错误,将 constexpr 数组作为模板非类型参数
- 将结构转换为 constexpr 数组uint8_t
- 如何以静态方式使用另一个 constexpr 数组初始化一个数组
- C++constexpr数组查找:内存开销?其他问题
- 将 constexpr 数组扩展为一组非类型模板参数
- 如何使用 std::copy 将一个 constexpr 数组复制到另一个 constexpr 数组
- 如何定义模板类专业化的静态constexpr数组成员
- 将ConstexPR数组复制到类中
- 正在初始化带模式的“constexpr”数组
- 将一个 constexpr 数组初始化为其他两个 constexpr 数组的总和