实现没有范围解析运算符的类?

时间:2014-07-22 22:19:39

标签: c++

如果我在头文件中声明我的类,是否有任何方法可以在没有所有烦人的范围解析运算符的情况下实现该类?我不喜欢为每个成员重写类名。我想我之前尝试过这样做:

在A.h

#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;
    }
}

但有一些错误(不幸的是现在无法测试)。

1 个答案:

答案 0 :(得分: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. 在实现班级成员职能的同时,为了节省一些关键笔划而失去清晰度是太昂贵的代价。

  6. 我是根据经验说的。我在一个项目中工作,其中一个类名是INR_DynamicallyTypedLowFidelityLeafComponentRepresentation。我不会使用预处理器宏来隐藏那么长的名字。