Determine if method or member can be protected or private

时间:2016-05-17 11:15:49

标签: c++ gcc

It is possible to check (for example by gcc) which methods or members can be moved to protected or private section?

3 个答案:

答案 0 :(得分:2)

考虑以下部分代码:

class foo{
    protected:
        void foo_method_1(){};
        int foo_member_var;
};

class bar : public foo{
    void bar_method_1(){
        foo_method_1();
    }
};

如果要确定foo类的哪些成员和方法可以是私有的,则必须将它们全部移动到私有部分。所以它看起来像这样:

class foo{
    private:
        void foo_method_1(){};
        int foo_member_var;
};
...

现在它不会编译,这是GCC抛出的第一个错误:

prog.cpp:5:8: error: 'void foo::foo_method_1()' is private
   void foo_method_1(){};

您知道,您必须将foo_method_1移动到受保护的部分。所以它看起来像这样:

class foo{
    private:
        int foo_member_var;
    protected:
        void foo_method_1(){};
};
...

现在它将编译。您必须为班级中的每个方法和成员重复此过程。对于公共部分,您可以采用与上述相同的方式进行操作。

答案 1 :(得分:2)

您无法以编程方式执行此操作,不会。 这实际上是一件好事。

当然,您可以创建一个与C ++解析器集成的工具,然后 - 逐个 - 使某些成员运行public并留下任何不会导致程序出错的地方

但是,为了做到这一点,您的整个程序需要对该工具可见。也许如果你有一个简单的项目不是问题,但如果你正在写一个几乎不可能的图书馆

即使你能做到这一点,你所产生的课程设计也将是一个绝对的混乱。 只有人类程序员才知道API的哪些部分是为了公共消费而设计的,并且这与当前正在使用的API的哪些部分并不总是相同

坚持手动方法,但不要只是复制机器的方式,根据编译的内容和不编译的内容随机猜测。使用你的大脑和你对这个类应该做的事情的记忆,确定哪些函数应该是du -h --max-depth=1 | sort -hr,哪些不应该。

理想情况下,在您首次设计课程时尽量做到正确!你应该花费更多的时间来设计你的程序,而不是实际编程,以免你很快就会遇到像这样的维护噩梦。

答案 2 :(得分:1)

没有。编译器会看到代码,而不是设计