抱歉,我不知道如何找到这个问题的好标题,随时可以编辑。
我有一系列具有相同角色的类,这意味着它们都实现了相同的接口(方法集)。考虑它们都从相同的抽象类继承(即使在最小的例子中不是这种情况;它不是这个问题的重点)。这些类都是模板化的。
我想定义一个类,用于模板参数,例如T
和U
,以及之前的一个类A
,不带模板参数。在内部,此新课程将使用A<T>
和A<U>
。这可能吗?欢迎使用C ++ 11答案,如有必要,可随意添加标签。
失败的例子在这里:
#include <iostream>
// ------------------------------------------------------------------------
struct eng_tag {};
struct fr_tag {};
struct sp_tag {};
// First implementation of the "talk interface"
template <class T = eng_tag> struct A
{
void talk() { std::cout<<"Hello\n"; }
};
template <> struct A<fr_tag>
{
void talk() { std::cout<<"Salut\n"; }
};
template <> struct A<sp_tag>
{
void talk() { std::cout<<"Ola\n"; }
};
// Second implementations
template <class T = eng_tag> struct B
{
void talk() { std::cout<<"Bye\n"; }
};
template <> struct B<fr_tag>
{
void talk() { std::cout<<"A bientot\n"; }
};
template <> struct B<sp_tag>
{
void talk() { std::cout<<"Adios\n"; }
};
// etc...
// ------------------------------------------------------------------------
template <class T, class U, class I = A>
struct Wrapper
{
I<T> one() { return I<T>(); }
I<U> two() { return I<U>(); }
};
// ------------------------------------------------------------------------
int main()
{
Wrapper<fr_tag,sp_tag,B> w;
w.one().talk();
w.two().talk();
}