【发布时间】:2015-10-29 18:19:48
【问题描述】:
我有一个类“A”,它公开了模板方法 foo。 Foo 有一个标准的实现,可以很好地与 B、C 配合使用。它还有一个针对 D 的特殊实现。
class A
{
template<typename T>
void foo()
{
//standard implementation
}
template<>
void foo<D>
{
//special implementation
}
}
class B{};
class C{};
class D{};
int main()
{
A<B> a1;
A<C> a2;
A<D> a3;
}
现在,我需要添加类 E,它要求“foo”与 D 具有相同的特殊实现。 有没有办法这样说:对于所有类型都使用标准 foo.对于 D、E(等等)的特殊实现。
class A
{
template<typename T>
void foo()
{
//standard implementation
}
template<>
void foo<D && E> <-- PseudoCode - It doesn't work
{
//special implementation
}
}
class B{};
class C{};
class D{};
class E{};
int main()
{
A<B> a1;
A<C> a2;
A<D> a3;
A<E> a4;
}
我正在考虑使用特征类。但我希望有更简单的方法来实现这一点。 谢谢
【问题讨论】:
-
D 和 E 有什么特别之处吗?即成员函数,特征
-
是的。他们有一个成员函数,比如说“void bar()”,而其他人没有。
-
类型是否相关;他们有共同的基础吗?
-
@Jason 不,他们没有。
-
怎么会有
A<B> a1;?A类未模板化。