检查类型是否使用多重继承

Check if type uses multiple inheritance or not

本文关键字:多重继承 是否 类型 检查      更新时间:2023-10-16

我有这些类:

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

是否有可能实现此行为?

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

但是,我个人认为,根据设计约束,这将非常乞求在这一点上进行重新设计,并且它确实不允许你做太多有用的事情,因为使用其他无用的类型来选择这个函数专用化。