将单个成员标记为私有

时间:2016-06-16 10:50:58

标签: c++ private public

在C ++中,我正在使用一个宏,我需要定义两个变量,第一个应该具有与定义它的范围相同的公共/私有/受保护状态,而另一个应该明显是私有的。但是,如果我这样做:

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

然后我永久改变了范围!这个不好。所以我想知道:有没有办法说:“只有这个变量/成员/方法/类是私有的”?

我天真地尝试过像

这样的事情
class my_class
{
   public:

   int i;
   private int j;
};

但没有运气。有没有办法得到我需要的东西?

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

3 个答案:

答案 0 :(得分:6)

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

  1. 将变量限制为从中继承的基类,并在那里使用宏。 (使用protected而非private)。

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

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

  4. 根本不要使用宏,因为它们通常是颈部疼痛。

答案 1 :(得分:2)

语言中没有内置功能可以做到这一点。在pushpop之间没有warningObject obj = ...; // The object sent over the stream if(obj instanceof String) { String str = (String) obj; // Cast it to String ... } else if(obj instanceof Integer) { Integer i = (Integer) obj; // Cast it to Integer ... } 设置,在某些编译器上有预处理​​器的其他方面。

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

不要浪费你的时间。我不会高效或有用。

答案 2 :(得分:1)

好吧,如果您认为“默认”范围是公开的,您可以随时将宏更改为:

#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: