1

我有这些课程:

class A{};
class B{};
class C : public A{};
class D : public A, public B{};

我想做一个这样的模板函数:

template<typename T>
void f(T* arg);

并为它制作2个专业:

  • 当 T 不使用继承或使用单继承时的一种
  • 当 T 使用多重继承时

假设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

是否有可能实现这种行为?

4

1 回答 1

1

虽然我不知道您的意图并同意预期的行为应该包含在问题中以获得更好的设计解决方案,但实现您要求的一个简单机制是创建一个空白接口,您的所有多重继承的类也必须继承from 和 to 专门用于该 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);

但是,我个人认为这将非常需要根据设计约束进行重新设计,并且它确实不允许您做很多有用的事情,因为使用了其他无用的类型来选择此功能专业化。

于 2013-01-28T17:37:10.593 回答