繁体   English   中英

实现没有作用域解析运算符的类?

[英]Implement class without scope resolution operator?

如果我在头文件中声明我的类,没有所有那些烦人的作用域解析运算符,有没有办法实现该类? 我不喜欢为每个成员重写类名。 我想我以前曾经尝试过这样做:

在啊

#if !defined(a_h)
#define a_h
class A {
    int function (int);
    int foo (void);
};
#endif

在A.cpp中

#include "A.h"
class A { 
     int function (int number) {
         return 2* number;
     }
    int foo (void){
        return 2;
    }
}

但出现了一些错误(很遗憾,现在无法对其进行测试)。

您可以使用预处理器宏来简化操作。

#include "A.h"
#ifdef _
#undef _
#endif
#define _(fun) A::fun

int _(function)(int number)
{
   return 2* number;
}

int _(foo)(void)
{
   return 2;
}

但是...

您不必仅仅因为可以就做某事。

不建议使用预处理器宏来隐藏语言的重要构造。 在走这条路之前,这里有一些需要考虑的事情。

  1. 与在任何有用的程序中编写其余代码所花费的时间相比,编写<ClassName>::花费的时间逐渐减少。

  2. 您花费在调试和维护程序上的时间将比编写<ClassName>::花费的时间高得多。

  3. .cpp文件中有多个类时,如果对所有类采用相同的策略,则很难清楚地看到哪个函数对应于哪个类。

  4. 调试时,您会感到沮丧,因为您进入某个功能后将看不到完全限定的功能名称。

  5. 清晰度的损失太昂贵了,要付出代价以换取在实现类的成员功能时节省一些按键的代价。

我说的是经验。 我在一个项目名称为INR_DynamicallyTypedLowFidelityLeafComponentRepresentation的项目中工作。 我不会使用预处理器宏来隐藏这么长的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM