c++ - 在没有范围解析运算符的情况下实现类?

标签 c++

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

在啊

#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 的项目中工作.我不会使用预处理器宏来隐藏那么长的名字。

关于c++ - 在没有范围解析运算符的情况下实现类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24898829/

相关文章:

c++ - 您如何试用小型/简单的 C 或 C++ 源代码?

c++ - cuda和c++问题

c++ - 关于在任何计算机上以相同速度运行程序的问题

c++ - 在 C++ 中按值传递时复制的顺序

c++ - 在 CMakeLists.txt 中执行 cmake 与在终端中执行 cmake 有什么区别,我们如何使其行为相同?

c++ - 中止(核心转储)

c++ - 如果模板类型也可以是字符串,如何将其转换为字符串?

c# - Windows Mobile 上的 GPU 访问

c++ - Win32 编辑控件为每个新行显示 '|' 类似符号

c++ - Boost:仅解析先前声明的变量