【发布时间】:2019-10-12 20:33:11
【问题描述】:
从模板基类派生类时,必须使用语法this->member 或using Base::member 来访问基类的成员。如果基类是泛型模板参数并且确定存在某些成员,也会发生同样的情况。
是否可以编写一个宏来“导入”我知道(或假设)存在的所有基类成员?
简单示例:
struct A {
int x = 0;
};
struct B {
int x = 0;
int y = 1;
};
template <class T>
struct C {
int x = 0;
T z = 0;
};
template <class BaseClass>
struct Derived : BaseClass {
using BaseClass::x;
void setx1() { x = 1; }
};
template <class T>
struct Derived_from_C : C<T> {
using C<T>::x;
void setx1() { x = 1; }
};
int main()
{
Derived<A> a;
a.setx1();
Derived<B> b;
b.setx1();
Derived_from_C<double> c;
c.setx1();
return 0;
}
在定义struct Derived 时,我假设模板参数BaseClass 包含一个成员x,但要在成员setx1 中使用它,我必须手动声明一个using。 Derived_from _C 也是如此,其中基类是模板类。但是,如果基类包含许多我想使用的成员,那么为每个成员添加using 会变得乏味且容易出错。
是否可以编写一个半自动执行此操作的宏?类似的东西
#define USING(class, __VA_ARGS__)
这样
USING(BaseClass, x, y, z)
扩展到
using BaseClass::x;
using BaseClass::y;
using BaseClass::z;
【问题讨论】:
标签: c++ inheritance preprocessor variadic-macros