在 C++ 中定义短函数名别名的最安全方法是什么?

2024-01-05

假设我有一堂课Utility在一个文件中utility.h:

class Utility {
public:
    static double longDescriptiveName(double x) { return x + 42; }
};

然后我发现我使用了这个函数longDescriptiveName(...)很多。就像我喝太多咖啡时不负责任的 C++ 程序员一样,我创建了一个新文件utilitymacros.h并在那里添加以下内容:

#define ldn Utility::longDescriptiveName

现在我包括"utilitymacros.h" in any *.cpp我在哪里使用ldn(...)我心里充满了喜悦,因为输入 3 个字母比输入 28 个字母方便多了。

问题:有没有比使用更安全(更合适)的方法来做到这一点#define?

我注意到在包含 boost 标头后我必须包含“utilitymacros.h”,这显然是我不喜欢的,因为它是冲突的迹象(尽管我得到的 Boost 错误对于冲突是什么不是很清楚) 。

澄清1:关于代码可读性

如果您可能会说这会对代码可读性产生负面影响,我向您保证不会,因为它是一小组被大量使用的函数。一个广为人知的例子是stoi for stringToInteger。另一个是pdf for probabilityDensityFunction等等。所以如果我想做以下事情,stoi我认为更具可读性:

int x = stoi(a) + stoi(b) + stoi(c) + stoi(d);

Than:

int x = Utility::stringToInteger(a) + Utility::stringToInteger(b)
        + Utility::stringToInteger(c) + Utility::stringToInteger(d);

Or:

int x = Utility::stringToInteger(a);
x += Utility::stringToInteger(b);
x += Utility::stringToInteger(c);
x += Utility::stringToInteger(d);

说明 2:编辑器宏

我使用 Emacs 作为我选择的 IDE 和 Kinesis 键盘,所以你知道我使用了大量的键盘宏、自定义键盘快捷键,以及实际修改我在编辑器中看到的内容与实际存储在 h/cpp 文件中的内容。但是,我仍然觉得在一些选定的情况下使用函数缩写的简单性和视觉可读性(如上所述)确实是我正在寻找的结果(这当然受到一定程度的影响)。


除了宏之外,你还可以写inline将调用转发到实际函数的函数:

inline double ldn(double x)
{
   return Utility::longDescriptiveName(x);
}

那肯定是safer比宏。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++ 中定义短函数名别名的最安全方法是什么? 的相关文章

随机推荐