枚举的元编程问题
Atm 我有这样的东西:
template<int n>
struct Pow
{
enum{val= Pow<n-1>::val<<1};
};
template<>
struct Pow<0>{
enum{val =1};
};
我可以访问像 Pow<30>::val 这样的数据。很好,但我想这样做
int main()
{
Pow<30>::val;
,然后使用变量 访问所有值<0,30>; 我知道我可以使用数组和动态编程,但是我可以用这种方式做到这一点吗? 对不起英语。
Atm i have sth like that:
template<int n>
struct Pow
{
enum{val= Pow<n-1>::val<<1};
};
template<>
struct Pow<0>{
enum{val =1};
};
I can acess data like Pow<30>::val. It's good but i want do like this
int main()
{
Pow<30>::val;
and then use variable to
access all of value <0,30>
I knew that i can use array and dynamic programming but can i do that in this way?
Sorry for English.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用 C++0x 可变参数模板:
然后:
这就是使用数组但没有动态初始化。由于您希望结果作为变量而不是 TMP,我认为这已经足够了。
Using C++0x variadic templates:
and then:
So that's with using an array but without dynamic initialization. Since you want the result as a variable and not for TMP I feel this is adequate.
当您执行
Pow<30>::val;
时,您将实例化两个模板的顶部,然后当它为零时,它将实例化专业化,并且只有最终结果在 < em>运行时,因为模板是在编译时解析的When you do
Pow<30>::val;
you will instantiate the top of your two templates, then when it get's to zero it will instantiate the specialization, and only the final result will be visible at runtime, since templates are resolved at compile time