Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使大多数编辑器的类实现代码可折叠?_C++_Oop_Folding - Fatal编程技术网

C++ 如何使大多数编辑器的类实现代码可折叠?

C++ 如何使大多数编辑器的类实现代码可折叠?,c++,oop,folding,C++,Oop,Folding,假设我有以下定义: namespace test { class Test1 { void someMethod(double a); void someOtherMethod(double a); //... }; class Test2 { void someMethod(double a); void someOtherMethod(double a);

假设我有以下定义:

namespace test
{
    class Test1
    {
        void someMethod(double a);
        void someOtherMethod(double a);
        //...
    };

    class Test2
    {
        void someMethod(double a);
        void someOtherMethod(double a);
        //...
    };
}
下面是一个示例实现(方法1):

下面是一个替代实现(方法2):

通常的实现方法是通过方法1。方法2的结果是,每个类的所有实现代码都可以在许多编辑器中折叠起来,这是我非常喜欢的特性

我想知道是否有更优雅的方法来实现这一点,例如,不必为每个新类重新打开名称空间?我试过这个:

{
    void Test1::someMethod(double a){}
}
{
    void Test2::someMethod(double a){}
}
但这是行不通的(我不得不承认,原因对我来说并不完全清楚……)。除了使代码可折叠外,是否存在有效的、类似的、没有任何影响的东西


显然,它应该尽可能可移植,并且不依赖于任何特定的编辑器

没有独立于编辑器的方法。1只需关闭并重新打开名称空间

也就是说,我认为可折叠性被高估了。特别是,您的用例只是另一个问题的症状:您的文件太长了。不要为每个文件定义多个类(除非这些类非常小或本质上相关)。这是一个简单的经验法则,可以很好地解决您的问题

如果您的代码文件超过几百行,请将它们拆分


1也就是说,不同的编辑提供不同的解决方案。例如,在Vim中,您可以执行以下操作:

namespace test {
    // Test 1 {{{

    void Test1::someMethod(double a){
        // do something
    }
    …

    // }}}


    // Test2 {{{

    void Test2::someMethod(double a){
        // do something
    }
    …

    // }}}
}

{{,}}}
是默认的,但是可以配置,
foldmarker

因为没有“代码可折叠性”的标准,我认为没有确定的答案。然而,如果你告诉我们你希望哪些编辑器的可折叠性工作,可能有人能够找到解决方案。简单大括号在Code::Blocks中工作,但在Visual Studio中不起作用(我试过)。@olchauvin:我大部分时间都在使用Geany,但是,我相信大多数(全部?)编辑器都能够在某种“结束”结构上折叠触发器。这可以是大括号(C/C++/Java/…)、缩进结束(Python)、显式“结束”关键字(Matlab/Octave/Fortran/…)。我正在寻找C/C++/Java版本,所以至少需要一个开始和结束括号。@MarkGarcia:你是说VS不能折叠任意范围(
{}
)?我很好奇它是如何检测用户定义的类和函数的……我希望它只在大括号上触发,但显然,MS更清楚:)也许这是一种防止在c++11中折叠大括号赋值的措施。那么我就使用名称空间技巧。至于你的进一步评论:我完全同意,但是,我问这个问题的原因是因为我面临着几十个本质上相关的课程。将它们分割成多个文件将导致比它所带走的更多的混乱和混乱。
{
    void Test1::someMethod(double a){}
}
{
    void Test2::someMethod(double a){}
}
namespace test {
    // Test 1 {{{

    void Test1::someMethod(double a){
        // do something
    }
    …

    // }}}


    // Test2 {{{

    void Test2::someMethod(double a){
        // do something
    }
    …

    // }}}
}