如何在C++项目中设置全局 #define?

How do I set a global #define in my C++ project?

本文关键字:设置 全局 #define 项目 C++      更新时间:2023-10-16

因为我总是很难在C++中找到构造函数,所以我想做这样的事情:

#define constructor

所以我可以打字

constructor ClassName::ClassName() {}

有没有一种好方法可以设置它,以便它对我的项目是全局的,而无需在每个文件中实际定义它?

我应该提到我正在使用Visual Studio,如果涉及到一些特定的内容。

(或者也许还有其他一些类似于override的关键字可用于构造函数?

这可能是一个坏主意,原因如下:

  • 宏可能非常危险。如果你#define constructor,源代码中任何地方的标记"构造函数"将被空白空间取代,这可能会非常混乱。如果您在某处有一个名为"constructor"的变量,或者尝试创建一个变量怎么办?如果您包含的标头(包括标准库(具有"构造函数"变量或类型怎么办?
  • 虽然你可以把一些关键字放在函数上,这些关键字对语义的影响不大,可以作为一个指标,但这些关键词确实做了一些事情,并且有意义的事情会让阅读你的代码的其他人感到困惑。
  • 如果您在使用语言时遇到问题,以至于很难找到构造函数,那么您要么使用IDE很差,要么不具备专业使用该语言所需的专业知识,因此显式标记构造函数并不能解决您的真正问题
  • 有更好的选择。

在您的问题的评论中提出了一个更好的选择 - 您可以在任何地方使用相同的评论:

class Foo {
Foo(); // constructor
};

现在您可以通过搜索"构造函数"来查找构造函数。如果您希望能够通过搜索找到特定类的构造函数,则可以执行以下操作:

class Foo {
/* constructor */ Foo();
};

如果你坚持这样做,这就是我建议的方法。

另一种方法:

我不建议你这样做。注释方法应该做你想要的,并且不太可能误导阅读你的代码的人或导致意外的语义更改。但是,如果您坚持使用关键字,请使用explicit关键字。将构造函数标记为"显式"可防止您初始化如下对象:Foo f = {1, 2},但不是这样:Foo f{1, 2}。这很烦人,但不是致命的。

class Foo {
explicit Foo();
}