我是一个新手,我想在良好的实践和设计中让自己更好,所以在阅读以下内容之前先考虑一下。DEFINE宏在所有平台上工作?
我正在创建一个单例类,并且我有很多静态成员。而不是每次像这样调用成员...
THECLASS::member
我在考虑使用一个定义的宏来缩短它。
#define(THECLASS::member, shortMember);
所以我的问题是,这会损害跨平台或交叉编译器。
我是一个新手,我想在良好的实践和设计中让自己更好,所以在阅读以下内容之前先考虑一下。DEFINE宏在所有平台上工作?
我正在创建一个单例类,并且我有很多静态成员。而不是每次像这样调用成员...
THECLASS::member
我在考虑使用一个定义的宏来缩短它。
#define(THECLASS::member, shortMember);
所以我的问题是,这会损害跨平台或交叉编译器。
实际上,您的定义不会在任何地方工作。它应该是:
#define shortMember THECLASS::member
和良好的做法是不试图挽救按键–可读性更重要的是,和别人读你的代码,希望看到theClass描述::成员,而不是shortMember,因为那时他知道在哪里寻找一个定义。
+1可读性更重要。你只能输入一段代码(比喻),但它会被读取很多次,而不仅仅是你自己。 – ChrisF 2010-06-19 17:02:38
你有shortMember和THECLASS :: member交换。编辑:我看你已经修好了。 – 2010-06-19 17:06:14
我认为这是一个很好的观点。 – numerical25 2010-06-19 17:15:12
如果你的类是由所有的静态方法,你可以改为声明namespace
与方法,那么当你要使用的方法.cpp文件,包括文件的顶部:
using namespace [your-namespace];
只是不要在头文件中这样做,否则会污染包含此头的所有其他文件的名称空间。
最有可能的,但是你打开了自己的名字空间冲突,有阶级本来应该避免的,所以它可能不是一个好主意。
您将需要使用正确的语法的宏定义:
#define shortMember THECLASS::member
然而,不这样做。
所有的宏都在一个命名空间中,并且替换发生在任何地方,所以最终会导致巨大的维护头痛。
这伤害了代码的可读性和可理解性,因为它使得它变得更加困难,这里的名字来自于和他们指
在这种情况下,比较好的做法是拼写出了名的地方你用吧。
定义将起作用,但不是您在问题中写入的定义。沿着线的东西:
class SingletonImpl {
...
SingletonImpl *getInstance() { return m_instance; }
}
#define SINGIMPL SingletonImpl::getInstance()
然后可以这样使用:
SINGIMPL->whatever();
但是请记住,宏只是做文本替换,因此忽略之类的命名空间。
要回答标题中的问题,是的,正确书写的DEFINE可以在所有平台上使用。然而,正如其他人所说,由于所列举的原因,这对您的目的不是一个好主意。
除了下面的评论,你应该考虑[根本不使用单例模式](http://jalf.dk/blog/2010/03/singletons-solving-problems-you-didnt-know-you-从未有-因为-1995 /)。 – 2010-06-19 17:05:41