【发布时间】:2013-11-11 23:39:51
【问题描述】:
有没有办法从编译器中提取部分默认特化?
说我有这两个参数模板:
template<typename A, typename B>
struct X {
A a;
B b;
};
我还有一些使用单个参数模板的代码,如下所示:
template<template<typename> class T, typename B>
struct make_T_of_B {
T<B> member;
};
我想说:
make_T_of_B<X<int>, double> dummy;
其中 X
template<typename B>
struct Y {
int a;
B b;
};
看起来就像一个人如何专门化 X
我意识到我可以级联模板参数
template<typename A>
struct Z1 {
// start from scratch
template<typename B>
struct Z2 {
A a;
B b;
};
// inherit from double template above
template<typename B>
struct X: ::X<A, B> {};
};
make_T_of_B<Z1<int>::Z2, double> dummy1;
make_T_of_B<Z1<int>::X, double> dummy2;
但我发现这很难阅读并且无法清楚地传达我的意图。
谢谢。
【问题讨论】:
-
template <typename T> using Foo = X<int, T>;怎么样?现在您可以使用Foo<double>并获得X<int, double>。 -
是的,谢谢,这就是我想要的。这是我无法访问的 C++11 功能,但它完美地回答了这个问题。我愿意接受这个——如果它是一个答案……
-
我添加了第二个答案。
标签: c++ templates template-templates