提问者:小点点

定义javascript构造函数关键字的宏


我有很多这样的类:

struct A_Insert
{
    Data &d;
    A_Insert(d) : d(d){}

    // ...
}

struct A_Query
{
    Data &d;
    A_Query(d) : d(d){}

    // ...
}

struct B_Insert
{
    Data &d;
    B_Insert(d) : d(d){}

    // ...
}

struct B_Query
{
    Data &d;
    B_Query(d) : d(d){}

    // ...
}

我所能想到的最好的做法是像这样定义一个宏:

#define Data_Query(name, body) struct name{Data &d; name(Data &d) : d(d) {} body}

但是这会导致一些难看的代码,因为我必须使用括号来定义结构,而我的IDE并不能很好地处理它。

Data_Query(A_Insert, 
    int bind_params(stmt &stmt){}
    ...
)

我想要一个宏,它可以让我获得构造函数的包含类型的名称,这样我就可以编写如下代码:

#define constructor CONTAINING_TYPE
#define Data_Construct Data &d; constructor (Data &d) : d(d) {}

struct A_Insert{Data_Construct//。。。}

这样,我的IDE就可以像对待普通的struct声明一样对待它。 如有任何建议,将不胜感激。


共1个答案

匿名用户

继承:

struct DataReference
{
    Data &d;
    
    DataReference(Data& d) : d(d) {}
};

struct A_Insert : DataReference
{
    using DataReference::DataReference;

    ...
};