假设我Utility
在文件中有一个类utility.h
:
class Utility {
public:
static double longDescriptiveName(double x) { return x + 42; }
};
然后我发现我经常使用这个功能longDescriptiveName(...)
。因此,当我喝了太多咖啡时,就像一个不负责任的 C++ 程序员一样,我创建了一个新文件utilitymacros.h
并在其中添加以下内容:
#define ldn Utility::longDescriptiveName
现在,我将其包括在我使用"utilitymacros.h"
的任何地方,我的内心充满了喜悦,因为输入 3 个字母与 28 个字母相比更加方便。*.cpp
ldn(...)
问题:有比 with 更安全(更合适)的方法#define
吗?
我注意到在包含 boost 标头之后我必须包含“utilitymacros.h”,我显然不喜欢它,因为它是冲突的标志(尽管我得到的 Boost 错误对于冲突是什么并不十分清楚) .
说明 1:关于代码可读性
如果您可能会说这会对代码的可读性产生负面影响,我向您保证不会,因为它是一小组经常使用的函数。一个广为人知的例子是stoi
for stringToInteger
。另一个是pdf
forprobabilityDensityFunction
等。因此,如果我想执行以下操作,stoi
我认为更具可读性:
int x = stoi(a) + stoi(b) + stoi(c) + stoi(d);
比:
int x = Utility::stringToInteger(a) + Utility::stringToInteger(b)
+ Utility::stringToInteger(c) + Utility::stringToInteger(d);
或者:
int x = Utility::stringToInteger(a);
x += Utility::stringToInteger(b);
x += Utility::stringToInteger(c);
x += Utility::stringToInteger(d);
说明 2:编辑器宏
我使用 Emacs 作为我选择的 IDE 和 Kinesis 键盘,所以您知道我使用了大量的键盘宏、自定义键盘快捷键,以及实际修改我在编辑器中看到的内容与实际存储在 h/cpp 文件中的内容。但是,我仍然觉得在一些选择的情况下使用函数缩写的简单性和视觉可读性(如上所述)确实是我正在寻找的结果(这当然受一定程度的影响)。