Как сделать код для реализации классов складным для большинства редакторов?

Предположим, у меня есть следующие определения:

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

Но это не работает (по причинам, которые не совсем очевидны для меня, я должен признать …). Есть ли что-то действительное, подобное, без какого-либо эффекта, кроме как сделать код складным?

Очевидно, он должен быть максимально переносимым и не зависеть от какого-либо конкретного редактора.

1

Решение

Нет никакого независимого от редактора способа.1 Просто закройте и снова откройте пространство имен.

Тем не менее, я думаю, что складываемость переоценена. В частности, ваш вариант использования является просто симптомом другой проблемы: ваши файлы слишком длинные. Не определяйте больше чем один класс на файл (если классы не очень малы или неразрывно связаны). Это простое правило, которое работает довольно хорошо и решает вашу проблему.

Если ваши файлы кода превышают пару сотен строк, разбейте их.


1 Тем не менее, разные редакторы предлагают разные решения. Например, в Vim вы можете сделать:

namespace test {
// Test 1 {{{

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

// }}}// Test2 {{{

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

// }}}
}

({{{,}}} по умолчанию, но настраивается, foldmarker.)

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]