【问题标题】:How to make code for class implementations foldable for most editors?如何使大多数编辑器可折叠的类实现代码?
【发布时间】:2012-10-04 07:18:38
【问题描述】:

假设我有以下定义:

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

    class Test2
    {
        void someMethod(double a);
        void someOtherMethod(double a);
        //...
    };
}

这是一个示例实现(方法 1):

namespace test
{
    // Test1
    // ----------------

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

    void Test1::someOtherMethod(double a){
        // do something else
    }


    // Test2
    // ----------------

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

    void Test2::someOtherMethod(double a){
        // do something else
    }

}

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

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

    void Test1::someOtherMethod(double a){
        // do something else
    }
}

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

    void Test2::someOtherMethod(double a){
        // do something else
    }
}

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

我想知道是否有任何更优雅的方法可以做到这一点,例如,不必为每个新类重新打开命名空间?我试过这个:

{
    void Test1::someMethod(double a){}
}
{
    void Test2::someMethod(double a){}
}

但这不起作用(出于对我来说并不完全显而易见的原因,我不得不承认......)。除了使代码可折叠之外,是否有一些有效的、类似的、没有任何影响的东西?

显然,它应该尽可能地便携,并且不依赖于任何特定的编辑器。

【问题讨论】:

  • 由于“代码可折叠性”没有标准,我认为没有确定的答案。但是,如果您告诉我们您希望可折叠性适用于哪些编辑器,那么有人可能会找到解决方案。
  • 简单大括号在 Code::Blocks 中有效,但在 Visual Studio 中无效(我试过)。
  • @olchauvin:好吧,我大部分时间都在使用 Geany,但是,我相信大多数(所有?)编辑器都能够在某种“结束”结构上折叠触发器。这可以是大括号 (C/C++/Java/...)、缩进结束 (Python)、显式“结束”关键字 (Matlab/Octave/Fortran/...)。我正在寻找 C/C++/Java 版本,所以至少需要一个开始和结束大括号。
  • @MarkGarcia:你是说 VS 不能折叠任意范围({})?我很好奇它是如何检测用户定义的类和函数的......我希望它只在大括号上触发,但显然,MS 知道得更好:)
  • 也许这是防止在 c++11 中折叠大括号赋值的一种措施。

标签: c++ oop folding


【解决方案1】:

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

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

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


1 也就是说,不同的编辑器提供不同的解决方案。例如,在 Vim 中你可以这样做:

namespace test {
    // Test 1 {{{

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

    // }}}


    // Test2 {{{

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

    // }}}
}

{{{,}}} 是默认值,但可配置,foldmarker。)

【讨论】:

  • 好吧,该死的。然后我将使用命名空间技巧。至于您进一步的 cmets:我完全同意,但是,我问这个问题的原因是因为我面临着几十个本质上相关的课程。将它们拆分为多个文件会导致更多的混乱和混乱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 2010-11-08
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多