【发布时间】:2011-09-15 19:12:35
【问题描述】:
我有以下“主要”模板:
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,请告诉我最合适的解决方案。
【问题讨论】:
-
template <class S> struct TT { /*...*/ };不是一个选项吗? -
TT< S1<5> > t2;您缺少 S1 的第二个参数。显而易见的大师。 -
@Mooing 谢谢,我已经考虑过这个选项,但是 TT 确实有内部 typedef(比如 P),这实际上是一个“实现细节”,并且 TT 用 P 指定了 S。此时我可以'不知道如何让 TT 接受类型而不是具有至少一个类型参数的模板。
-
@AJG85 显然提供第二个参数不会使这个编译以及 - 所以问题的本质......
-
@Artem Pelenitsyn:请参阅 Nawaz 的回答,不需要嵌套模板。您可以将默认的
int参数添加到S11模板,并在需要时将其传递给包装器。