【发布时间】:2020-11-16 17:49:55
【问题描述】:
我有很多这样的课程:
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_Insert { 数据构造 // ... }
这样我的 IDE 可以将其视为普通的 struct 声明。任何建议将不胜感激。
【问题讨论】:
-
宏的本质是它们会导致一些丑陋的代码。不清楚为什么要首先使用宏。
-
@idclev463035818 有时为每个新构造函数输入类的名称可能很乏味。我想如果有类似 javascript 构造函数关键字的东西,它定义了一个构造函数,同时使其易于复制和粘贴并保持代码的可读性。我会将其添加到我的问题中。
-
我看不出有什么原因。如果您使用的是中规中矩的 IDE,它肯定支持模板和自动完成。
-
@bipll 是真的,但我敢说有宏的代码往往比没有宏的代码更丑
-
不,这在 C++ 中是不可能的。当然,使用宏几乎一切皆有可能,但在我工作的地方,只有一次才有可能。
标签: c++ c++11 constructor macros