2012-10-04 52 views
1

假設我具有以下定義:如何爲大多數編輯器摺疊類實現的代碼?

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 
    } 
} 

通常方法2的實現方式是通過方法1.方法2的結果是每個類的所有實現代碼都可以在許多編輯器中被摺疊,af我很喜歡的特質。

我想知道是否有更好的方法來做到這一點,例如,不必爲每個新類重新打開名稱空間?我試過這個:

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

但這不起作用(因爲我不完全明顯的原因,我不得不承認...)。除了使代碼可摺疊以外,還有什麼有效的,類似的,沒有任何效果?

很顯然,它應該儘可能的便攜並且不依賴於任何特定的編輯器。

+0

由於是「代碼摺疊」沒有標準,我不認爲有肯定的答案。但是,如果您告訴我們您希望可摺疊性工作的編輯人員,有人可能會找到解決方案。 – Mesop

+0

簡單的大括號在Code :: Blocks中工作,但不在Visual Studio中(我試過)。 –

+0

@olchauvin:嗯,我大部分時間都在使用Geany,但是,我相信大多數(所有?)編輯器都能夠在某種「結束」構造上摺疊觸發器。這可以是大括號(C/C++/Java/...),縮進結尾(Python),明確的「結束」關鍵字(Matlab/Octave/Fortran/...)。我正在尋找C/C++/Java版本,所以至少需要一個開始和結束大括號。 –

回答

2

沒有獨立於編輯器的方式。 只需關閉並重新打開命名空間即可。

這就是說,我認爲可摺疊性被高估了。特別是,您的使用案例僅僅是另一個問題的症狀:您的文件太長。不要爲每個文件定義多個類(除非這些類相當小或者與內在相關)。這是一個簡單的經驗法則,可以很好地解決您的問題。

如果您的代碼文件超過了幾百行,請將它們分開。


這就是說,不同的編輯器提供了不同的解決方案。例如,在Vim中你可以這樣做:

namespace test { 
    // Test 1 {{{ 

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

    // }}} 


    // Test2 {{{ 

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

    // }}} 
} 

{{{,}}}是默認,但可配置,foldmarker

+0

好吧,喂。然後我會使用命名空間技巧。至於你的進一步評論:我完全同意,但是,我問這個問題的原因是因爲我面對幾十個類都有內在聯繫的類。將它們分割成多個文件將導致更多混亂和混亂。 –