将单个成员标记为私有

Mark a single member as private

在 C++ 中,我正在使用一个宏,我需要在其中定义两个变量,第一个变量应具有与定义它的范围相同的 public / private / protected 状态,而other 显然应该是私有的。但是,如果我这样做:

#define my_macro(a, b) int a;\
private: int b;

那我已经永久更改范围了!这个不好。所以我想知道:有什么办法可以说:"only this variable / member / method / class is private"?

我天真地尝试过做类似

的事情
class my_class
{
   public:

   int i;
   private int j;
};

但运气不好。有什么办法可以得到我需要的东西吗?

编辑:我不确定定义宏的范围是public。正如我所说,“[...] 其中第一个应具有与定义它的范围相同的 public/私有/受保护状态”,因此 public 或私有或受保护,具体取决于范围。

好吧,如果您假设 'default' 范围是 public,您总是可以将宏更改为:

#define my_macro(a, b) int a;\
private: int b;              \
public:

甚至:

#define my_macro(a, b)       \
private: int b;              \
public:  int a;

或者如果您不确定默认范围是什么,您可以随时将其添加为宏参数:

#define my_macro(scope, a, b) int a;\
private: int b;                     \
scope:

不,没有。不过有一些解决方法:

  1. 将您的变量限制在您继承的基础class,并在那里使用您的宏。 (使用 protected 而不是 private)。

  2. 使用内部 struct 采用与 (1) 类似的技术。

  3. 做务实的事情,让宏设置第一个或最后一个成员块。

  4. 根本不要使用宏,因为通常它们会让人头疼。

语言中没有内置功能可以做到这一点。在某些编译器上,没有 pushpop 设置,例如 warning 和预处理器的其他方面。

更大的问题是为什么?您声明 class' 骨架,以后很少更改它。这是不值得的努力。此外,它还会降低代码的可读性和维护复杂性。

不要在上面浪费时间。我不会有生产力或有用。