我有这些课程:
class A{};
class B{};
class C : public A{};
class D : public A, public B{};
我想制作一个这样的模板函数:
template<typename T>
void f(T* arg);
并为其制作2个专业:
假设f_specialization1()
是第一种情况而f_specialization2()
(我知道他们必须有相同的名字,这只是一个方便的约定)。我想要这种行为:
A a;
B b;
C c;
D d;
f(&a);//here f_specialization1 is called
f(&b);//here f_specialization1 is called
f(&c);//here f_specialization1 is called
f(&d);//here f_specialization2 is called
有可能实现这种行为吗?
答案 0 :(得分:1)
虽然我不知道你的意图并且同意在问题中包含预期的行为以获得更好的设计解决方案,但实现你所要求的一个简单机制是创建一个空白接口,所有你的多重继承类还必须继承并专门用于MultipleInheritance“接口”。
class MultipleInheritance
{
protected:
MultipleInheritance() {}
};
class A{};
class B{};
class C : public A{};
class D : public A, public B, public MultipleInheritance {};
template<>
void f(MultipleInheritance* arg);
template<typename T>
void f(T* arg);
然而,我个人认为,根据设计约束,这将非常需要重新设计,并且它实际上不允许您做很多有用的事情,因为使用其他无用的类型来选择此功能专业化。