【发布时间】:2012-12-15 01:26:16
【问题描述】:
假设我在文件utility.h 中有一个类Utility:
class Utility {
public:
static double longDescriptiveName(double x) { return x + 42; }
};
然后我发现我经常使用函数longDescriptiveName(...)。因此,当我喝了太多咖啡时,我就像一个不负责任的 C++ 程序员一样,创建了一个新文件 utilitymacros.h 并在其中添加以下内容:
#define ldn Utility::longDescriptiveName
现在我将"utilitymacros.h" 包含在我使用ldn(...) 的任何*.cpp 中,我的内心充满喜悦,因为输入3 个字母比28 个字母更方便。
问题:有没有比#define 更安全(更合适)的方法?
我注意到在包含 boost 标头之后我必须包含“utilitymacros.h”,我显然不喜欢它,因为它是冲突的标志(尽管我得到的 Boost 错误并不清楚冲突是)。
说明 1:关于代码可读性
如果您可能会说这会对代码的可读性产生负面影响,我向您保证不会,因为它是一小组经常使用的函数。一个广为人知的例子是stoi 代表stringToInteger。另一个是pdf for probabilityDensityFunction 等。所以如果我想做以下事情,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 中的内容文件。但是,我仍然觉得在一些特定情况下使用函数缩写的简单性和视觉可读性(如上所述)确实是我正在寻找的结果(这当然受一定程度的影响)。
【问题讨论】:
-
我真的不认为这是一个好主意,因为它会损害代码的可读性。
-
我认为
pdf是一种文件格式,并且真的感到困惑。角色是免费的,不使用它们并不能拯救环境。 -
好吧,也许短名称对您来说是可读的,但对其他人来说很难,即使(或特别是)它们在任何地方都使用。在我的旧版本中,有很多 3 个字符的函数名称,这也是我退出那里的众多原因之一:代码混乱不堪。当然,不仅仅是因为函数和变量名,而是因为它是其中的一部分。
标签: c++ function macros alias c-preprocessor