Предположим, у меня есть следующие определения:
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 Тем не менее, разные редакторы предлагают разные решения. Например, в Vim вы можете сделать:
namespace test {
// Test 1 {{{
void Test1::someMethod(double a){
// do something
}
…
// }}}// Test2 {{{
void Test2::someMethod(double a){
// do something
}
…
// }}}
}
({{{,}}}
по умолчанию, но настраивается, foldmarker
.)
Других решений пока нет …