假设我有两个带有一堆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,所以我不需要手动指定它们。
答案 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)
使用private
或protected
继承而不是public
继承,然后使用using
语句声明要在Z
中使用的项目,例如:
struct Z : protected X, protected Y
{
using X::type1;
using X::type2;
// ...
};