C++ 用于定义javascript构造函数关键字的宏

C++ 用于定义javascript构造函数关键字的宏,c++,c++11,constructor,macros,C++,C++11,Constructor,Macros,我有很多课程是这样的: 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

我有很多课程是这样的:

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}
我认为最好的办法是定义如下宏:

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) {}
结构A_插入 { 数据结构 // ... }

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

继承:

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

struct A_Insert : DataReference
{
    using DataReference::DataReference;

    ...
};
继承:

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

struct A_Insert : DataReference
{
    using DataReference::DataReference;

    ...
};


宏的本质是它们会导致一些丑陋的代码。不清楚为什么要首先使用宏。@idclev463035818为每个新构造函数键入类名有时会很繁琐。我想知道是否有像javascript构造函数关键字这样的东西,它定义了一个构造函数,同时使它易于复制和粘贴,并保持代码的可读性。我会在我的问题中补充这一点,我看不出有什么理由。如果你使用的是一个中庸的IDE,它肯定支持模板和自动完成。@ BIPLL真词,但是我敢说,宏代码比代码更丑陋,它在C++中是不可能的。当然,使用宏几乎所有事情都是可能的,但在我工作的地方,这只可能发生一次。宏的本质是它们导致一些丑陋的代码。不清楚为什么要首先使用宏。@idclev463035818为每个新构造函数键入类名有时会很繁琐。我想知道是否有像javascript构造函数关键字这样的东西,它定义了一个构造函数,同时使它易于复制和粘贴,并保持代码的可读性。我会在我的问题中补充这一点,我看不出有什么理由。如果你使用的是一个中庸的IDE,它肯定支持模板和自动完成。@ BIPLL真词,但是我敢说,宏代码比代码更丑陋,它在C++中是不可能的。当然,宏几乎可以实现所有功能,但在我工作的地方,只能实现一次?这似乎将
DataReference
构造函数拉到
A_Insert
中的查找中,但它已经在那里找到了。我看不出有什么意义,我是不是错过了什么?我不知道。但我现在使用的编译器有一个C++版本,不会自动地做。@ ArthurTacca我尝试过没有它,它没有工作。我不太明白,但它似乎起作用了。啊,我明白了:我以为在
中,您打算声明另一个使用
数据引用的构造函数。但实际上,您建议根本不要在派生类上编写构造函数。相反,使用
DataReference(Data&d)
转换为
a\u Insert(Data&d)
constructor自动生成。这是最接近我想要的一个构造函数,无需编写声明类型,因为“using”不需要包含类型的名称。使用DataReference::DataReference的目的是什么?这似乎将
DataReference
构造函数拉到
A_Insert
中的查找中,但它已经在那里找到了。我看不出有什么意义,我是不是错过了什么?我不知道。但我现在使用的编译器有一个C++版本,不会自动地做。@ ArthurTacca我尝试过没有它,它没有工作。我不太明白,但它似乎起作用了。啊,我明白了:我以为在
中,您打算声明另一个使用
数据引用的构造函数。但实际上,您建议根本不要在派生类上编写构造函数。相反,
using
会自动将
DataReference(Data&d)
转换为
a_Insert(Data&d)
构造函数。这与我想要的构造函数最接近,而不必编写声明类型,因为“using”不需要包含类型的名称。