Здравствуйте, SWW, Вы писали:
SWW>А что, есть люди, которые пишут реализацию функции вне определения класса, но в том же h-файле?
Да, есть. Более того, их большое количество.
SWW>>А что, есть люди, которые пишут реализацию функции вне определения класса, но в том же h-файле?
AVK>Я, например.
Э-ээ... Даже не знаю, что и сказать... А я, наивный, всегда считал что в заголовке не должно быть определений — только объявления... А не смущает ругань компилятора о невозможности создания precompiled header'а?
Здравствуйте, SWW, Вы писали:
SWW>И дальше, в этом же файле вы пишите: SWW>
inline X::func()
SWW> {
SWW> ...
SWW> }
SWW>
SWW>Так?
Да.
Что касается лично меня:
Да, для всех методов кроме аксессоров, помещающихся в полстроки. В важных классах — вообще никакой реализации внутри тела класса быть не должно — чтоб броузинг интерфейса класса не затуманивали подробности егойной реализации.
Также, т.к. код в моем случае должен поддержживаться VC6, внутри тела класса всегда пишутся все шаблонные функции-члены, но это исключение, налагаемое компилятором.
Здравствуйте, SWW, Вы писали:
SWW>>>1. Функция, реализованная в заголовке, считается имеющей модификатор 'inline'.
АТ>>Ничего подобного. Собственно компилятор не в состоянии распознать функцию, реализованную в заголовке, по той
SWW>7.1.2 SWW>... SWW>3 A function defined within a class definition is an inline function.
А это здесь к чему? Перевожу цитату из стандарта: "Функция, определенная в определении класса, является inline-функцией". А теперь твои слова: "Функция, реализованная в заголовке, считается имеющей модификатор 'inline'". Разницы не замечаешь?
Здравствуйте, SWW, Вы писали:
SWW>>>1. Функция, реализованная в заголовке, считается имеющей модификатор 'inline'.
D>>возможно, ты путаешь с функциями, реализованными внутри определения класса.
SWW>А что, есть люди, которые пишут реализацию функции вне определения класса, но в том же h-файле?
Здравствуйте, SWW, Вы писали:
SWW>>>А что, есть люди, которые пишут реализацию функции вне определения класса, но в том же h-файле?
AVK>>Я, например.
SWW>Э-ээ... Даже не знаю, что и сказать... А я, наивный, всегда считал что в заголовке не должно быть определений — только объявления...
Это совершенно не верно. В заголовках всегда были, есть и будут присутствовать определения. Только надо помнить, какие определения можно помещать в заголовок, а какие нельзя.
SWW>А не смущает ругань компилятора о невозможности создания precompiled header'а?
Ы? Нет, разумеется, не смущает. Ибо нет никакой ругани.
Здравствуйте, SWW, Вы писали:
Kaa>>Конструкция Kaa>>
Kaa>>class X { ... };
Kaa>>
Kaa>>называется определением класса. А как же без них в заголовках обойтись?
SWW>Да, разумеется. И дальше, в этом же файле вы пишите: SWW>
SWW>X::func()
SWW> {
SWW> ...
SWW> }
SWW>
SWW>Так?
А это откуда следует? Определние класса можно располагать в заголовке. Определения шаблонных функций можно располагать в заголовке. Определения статических функций (не методов) можно располагать в заголовке. Определения методов класса нельзя располагать в заголовке, за исключением случаев, когда это inline-методы. И т.д.
Как я уже сказал выше, надо соображать, какие определния можно помещать в заголовок, какие определния нужно помещать в заголовок и какие определния нельзя помещать в заголовок.
АТ>>Ы? Нет, разумеется, не смущает. Ибо нет никакой ругани. WH>На 99% уверен у него билдер
Ты почти угадал. Эту ругань я видел на билдере лет 5 назад. С тех пор я перешел на VC, но никогда не пытался в h-файле помещать определения функций или переменных, считая это недопустимым (хотя бы потому, что этот файл нельзя будет включать в нексолько cpp-файлов). И когда в этом флейме писали о "функциях, реализованных в заголовке", я (а также, вероятно, skyline) считал, что речь идет о функциях, реализованных в определении класса.