2016-11-12 1 views
1

Я начал программировать 5 лет назад в java, поэтому, когда я перешел на C++ 2 года назад, реализация функций-членов была довольно раздражающей.C++: Любой способ избежать ввода имени класса перед каждой функцией-членом?

Foo::bar(){/*some stuff*/} 
Foo::baz(){/*some other stuff*/} 

Тогда я просто любопытным привык к этому, но в последнее время я задавался вопросом, есть ли способ структурирования кода, чтобы избежать печатая, что Foo :: каждая функция, возможно, что-то вроде:

Foo::{ 
    bar(){//some stuff} 
    baz(){//some other stuff} 
} 

Я обнаружил, что даже через 2 года у меня все еще есть проблемы с чтением даже моего собственного кода, потому что имя самой функции не первое в строке.

Редактировать: Поскольку этот вопрос является дубликатом, я думал, что поделился бы одной штукой, которую я нашел, щелкнув по ссылкам. На данный момент это невозможно, но есть proposal, чтобы добавить его в стандарт. Не знаю, может ли или когда он может быть добавлен, но если вы читаете это через несколько лет, это может быть хорошим руководством.

+2

но написание публичного или частного повсюду не раздражает;) – Logman

ответ

1

Нет, нет (если вы не определяете функцию-член контекстно с ее объявлением, таким образом, когда вы определяете свой класс - это более или менее то, что происходит на Java).

Другими словами, если вы не хотите, чтобы это сделать:

// .h 
struct S { void f(); }; 
// .cpp 
void S::f() {} 

Вы все еще можете это сделать:

// .h 
struct S { void f() {} }; 

Во всяком случае, имеет свои недостатки, и вы не могли быть готовы иметь дело с ними в любой ситуации.

+0

Проблема в том, что ваши примеры не полностью равны. – Logman

+0

@Logman: второй увеличивает вероятность того, что вызовы 'S :: f()' могут быть встроены, но они функционально эквивалентны. – Peter

+0

Я также хотел бы иметь возможность сохранить декларацию класса и реализацию отдельно. Я полагаю, что я не могу иметь свой торт и съесть его в этом случае? – ThaHypnotoad

Смежные вопросы