将可变参数模板链接在一起
如果将以下代码中的 X
转换为使用 C++11 可变参数模板,并且应该支持任意数量的模板参数,那么它会是什么样子?
template<int OFFSET>
struct A { enum O { offset = OFFSET }; enum S { size = 2 }; };
template<int OFFSET>
struct B { enum O { offset = OFFSET }; enum S { size = 4 }; };
template<int OFFSET>
struct C { enum O { offset = OFFSET }; enum S { size = 10 }; };
template < template <int> class B0,
template <int> class B1,
template <int> class B2 >
struct X : public B0<1>,
B1<B0<1>::size * B0<1>::offset >,
B2< B1<B0<1>::size * B0<1>::offset >::size *
B1<B0<1>::size * B0<1>::offset >::offset >
{ };
int main(int argc, const char *argv[])
{
X<A, B, C> x;
return 0;
}
What would X
in the following code look like if it was converted to use C++11 variadic templates, and should support arbitrary number of template arguments?
template<int OFFSET>
struct A { enum O { offset = OFFSET }; enum S { size = 2 }; };
template<int OFFSET>
struct B { enum O { offset = OFFSET }; enum S { size = 4 }; };
template<int OFFSET>
struct C { enum O { offset = OFFSET }; enum S { size = 10 }; };
template < template <int> class B0,
template <int> class B1,
template <int> class B2 >
struct X : public B0<1>,
B1<B0<1>::size * B0<1>::offset >,
B2< B1<B0<1>::size * B0<1>::offset >::size *
B1<B0<1>::size * B0<1>::offset >::offset >
{ };
int main(int argc, const char *argv[])
{
X<A, B, C> x;
return 0;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
也许:
我希望我的语义是正确的。
Maybe:
I hope I got the semantics right.
你对这个问题还感兴趣吗?
我正在使用 C++11,所以我尝试回答。
我不确定你想要什么(嗯……你在 2012 年想要什么),但我认为下面的例子应该能满足你的需求。
ps:抱歉我的英语不好
You're still interested in this question?
I'm plying with C++11 so I've tried to answer.
I'm not sure to understand what you want (well... what you wanted in 2012) but I think the following example should catch you're requirements.
p.s.: sorry for my bad English