如何在多重继承下从一个基类继承所有typedef?

时间:2011-12-13 23:59:33

标签: c++ c++11

假设我有两个带有一堆typedef的基类:

struct X {
  typedef int type1;
  typedef float type2;
  // A bunch of other typedefs.
};

struct Y {
  typedef long type1;
  typedef char type3;
  // Some other typedefs.
};

struct Z : public X, public Y {
};

如何指定我想让Z从X继承所有typedef,而不是手动解决每种类型的冲突?我的意思是O(1)代码来实现这个而不是O(n),其中n是冲突类型的数量。同样在元编程的情况下,人们不会知道X和Y中的确切typedef,因此无法手动解决冲突。

在单继承的情况下,它会自动使用基类的typedef,所以我不需要手动指定它们。

2 个答案:

答案 0 :(得分:4)

嗯,它运作得很好。您只需要解决冲突。

struct X
{
    typedef int type1;
    typedef int type2;
};

struct Y
{
    typedef double type1;
};

struct Z : public X, public Y 
{
    type2 z1;
    typedef X::type1 type1;
    type1 z2;
};

int main()
{
    Z z;
    Z::type2 x;
    Z::type1 y;
}

答案 1 :(得分:2)

使用privateprotected继承而不是public继承,然后使用using语句声明要在Z中使用的项目,例如:

struct Z : protected X, protected Y
{ 
    using X::type1;
    using X::type2;
    // ...
};