我是一个新手,我正在努力改善自己的良好实践和设计,所以在阅读以下内容之前请考虑这一点。
我正在创建一个单例类,我有很多静态成员。而不是像这样每次都给成员打电话......
THECLASS::member
我正在考虑使用define宏来缩短它。
#define(THECLASS::member, shortMember);
所以我的问题是,这会对跨平台还是交叉编译器造成伤害。
答案 0 :(得分:7)
实际上,您的定义无法在任何地方使用。它应该是:
#define shortMember THECLASS::member
一个好的做法是不尝试保存击键 - 可读性更重要,阅读代码的人希望看到THECLASS ::成员,而不是shortMember,因为他知道在哪里寻找定义。
答案 1 :(得分:6)
您需要为宏定义使用正确的语法:
#define shortMember THECLASS::member
但是,不要这样做。
所有宏都在一个命名空间中,并且替换发生在任何地方,因此您最终会遇到巨大的维护问题。
这会损害代码的可读性和可理解性,因为它会使名称来自以及它们引用的内容变得更加困难
在这种情况下,良好的做法是在您使用它的任何地方拼出名称。
答案 2 :(得分:1)
如果您的班级由所有静态方法组成,您可以改为声明namespace
使用这些方法,然后当你想使用.cpp文件中的方法时,请在文件的顶部包含:
using namespace [your-namespace];
只是不要在头文件中执行此操作,否则您将污染包含此标头的所有其他文件的命名空间。
答案 3 :(得分:1)
最有可能,但是你打开自己的命名空间冲突,首先应该避免让类避免,所以它可能不是一个好主意。
答案 4 :(得分:0)
定义可行,但不是你在问题中写的定义。有点像:
class SingletonImpl {
...
SingletonImpl *getInstance() { return m_instance; }
}
#define SINGIMPL SingletonImpl::getInstance()
然后可以像这样使用:
SINGIMPL->whatever();
但请记住,宏只是进行文本替换,因此会忽略名称空间等内容。
答案 5 :(得分:0)
要回答标题中的问题,是的,正确编写的DEFINE将适用于所有平台。然而,正如其他人所说,由于引用的原因,这对你的目的不是一个好主意。