我目前正在开发一个通用的C ++库。
好吧,我喜欢使用真实的单词函数名称,实际上我的项目有一个一致的函数命名系统。函数(或方法)以动词开头,如果它们不返回bool(在这种情况下,它们以is_开头)
问题是这对某些程序员来说可能有些问题。考虑这个功能:
#include "something.h"
int calculate_geometric_mean(int* values)
{
//insert code here
}
我认为这些功能似乎是正式的,所以我将其功能命名为。 但是我为用户设计了一个简单的宏系统来切换功能名称。
#define SHORT_NAMES
#include "something.h"
#ifdef SHORT_NAMES
int calc_geometric_mean(int* values)
#else
int calculate_geometric_mean(int* values)
#endif
{
//some code
}
这比使用别名更明智(因为函数的每个别名都将在内存中分配),或者这个解决方案是纯粹的邪恶吗?
答案 0 :(得分:4)
FWIW,我不认为这种双命名系统增加了很多价值。然而,它确实有可能引起很多混乱(温和地说)。
无论如何,如果你确信这是一个好主意,我会通过内联函数而不是宏来实现它。
// something.h
int calculate_geometric_mean(int* values); // defined in the .cpp file
inline int calc_geo_mean(int* values) {
return calculate_geometric_mean(values);
}
答案 1 :(得分:2)
将哪些符号导出到目标文件/库?如果您尝试使用其他版本怎么办?你会用自己的符号分发两个二进制文件吗?
所以 - 不,不好主意。
答案 2 :(得分:0)
通常,命名系统背后的目的是帮助提高代码的可读性和理解。
现在,您实际上有两个系统,每个系统都有一个基本原理。你已经迫使读者/维护者记住两种命名方法,这会削弱可读性的最终目标。别介意丑陋的#defines最终污染你的代码库。
我会说选择一个系统并坚持下去,因为一致性是关键。我不会说这个解决方案本身就是纯粹的邪恶 - 我会说这不是一个开始的解决方案。