“部分应用”对于模板参数
我有以下“主”模板:
template <
template <typename> class S
> struct TT { /*...*/ };
以及我想与 TT
: 一起使用的模板:
template <int N, typename T> struct S1 {};
特别是,我想使用类似的东西,
TT< S1<5> > t2; // "Invalid template arguments" here
它是模板的一种部分应用程序。我知道Boost.MPL涉及到这种东西。问题是我已经有一些使用 TT 的代码和类似的模板,
template <typename T> struct S2 {}; // S3, S4…
这些代码被输入到 TT 中。
所以问题是:如何在对现有代码进行最小修改的情况下将 S1
与 TT
结合使用。如果必须使用 Boost.MPL,请告诉我最合适的解决方案。
I have the following “main” template:
template <
template <typename> class S
> struct TT { /*...*/ };
and the template I want to use with TT
:
template <int N, typename T> struct S1 {};
In particular, I want to use something like
TT< S1<5> > t2; // "Invalid template arguments" here
It is a kind of partial application for templates. I know that Boost.MPL involves this kind of stuff. The problem is that I already have some code using TT and templates like
template <typename T> struct S2 {}; // S3, S4…
which are fed to TT.
So the question is: how can I use S1
with TT
with smallest modifications to existing code. If it is mandatory to use Boost.MPL please show me most suitable solution.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
将从
S1
派生的类模板定义为:然后使用
S11
,而不是S1
作为:工作代码: http://ideone.com/y2s7n
阅读您的评论,看来您需要这个:
Magic Demo : http://ideone.com/4yxvK
Define a class template deriving from
S1
as:And then use
S11
, instead ofS1
as:Working code : http://ideone.com/y2s7n
Reading your comment, it seems you need this:
Magic Demo : http://ideone.com/4yxvK
您还可以编写通用的部分应用程序工具:
或者如果您希望应用程序的结果时间是原始模板的专业化而不是派生类(派生类等),则可以这样:
you can also write a generic partial application facility:
or like this if you want the result time of the application to be the original template's specializations instead of a derived class (of a derived class, etc.):