有没有办法从编译器中提取部分默认特化?
假设我有这两个参数模板:
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<int> 被视为单个参数模板。它相当于这个模板:
template<typename B>
struct Y {
int a;
B b;
};
这看起来就像一个人如何专门化 X<int, B> 而不实际改变任何东西。它在某种程度上类似于默认特化——除了默认特化不产生另一个模板而是产生一个实际类型(换句话说,它总是总的)。
我意识到我可以级联模板参数
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;
但我发现这很难阅读并且无法清楚地传达我的意图。
谢谢你。