![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
null56 |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 2 Всего: 12 |
Собственно хотел поинтересоваться, существует ли способ реализовать такую запись
Собственно, как умудряются объявлять функцию INLINE в хедере, а реализовывать в спп....? Если я пробую провернуть нечто подобное, то получаю
и это логично, даже сам стандарт говорит о том, что объявлегние и определение должно быть в хедере, но не раз наблюдал обратное.... Вот например фрагменты из Qt класса QString....
Как такое реализуется? с помощью определенных настроек компилятора? или как? Заранее благодарен за помощь |
||||||||
|
|||||||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
inline - это всего-лишь хинт компилятору, можно просто им не пользоваться, на результат это не повлияет
![]() |
|||
|
||||
null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 2 Всего: 12 |
Не... вопрос в том, как это реализуется, просто так, как я написал не выходит
|
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
Из книги:
Определенные внутри класса функции-члены, такие, например, как не получающие никаких аргументов, автоматически считаются встраиваевыми. Т.е. при создании исполняемого кода компилятор попытается встроить ее содержимое по месту вызова. Функцию-член можно также объявлять встраиваемой явно. Функцию-член можно объявить встраиваемой в составе ее объявления внутри тела класса. В качестве альтернативы, функцию можно объявить встраиваемой при ее определении вне тела класса. Т.е. ключевое слово inline применимо как в объявлении, так и в определении. Преимуществом определения встраиваемых функций вне класса является повышение удобочитаемости кода класса. На заметку: Подобно другим встраиваевым функциям, определение встраиваемой функции-члена должно присутствовать в каждом использующем ее файле исходного кода. Определение встраиваемой функции-члена, располагаемое вне теле класса, как правило, имеет смысл помещать в тот же файл заголовка, в котором определён класс. |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Если эти члены публичные, то они должны быть определены во включаемом коде, иначе будут проблемы на линковке. Если их нет в хедере, возможно они вынесены в какой-то отдельный файл, но все равно включены инклудом, скажем, в конце хедера. Например, так делается в MFC - куча функций реализованы в файлах inl. Но никто не мешает назвать файл cpp - препроцессору это все равно. -------------------- ... |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
null56, покажи как ты делал, и как тебе сказал компилятор. Так же скажи какой компилятор.
|
|||
|
||||
null56 |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 2 Всего: 12 |
vinter, ну я написал, как пытался сделать, пытался засунуть объявление в хедер
а определение в cpp
Ну написал линковщик вполне предсказуемо что...
Earnest правильно скзаал, я об этом не подумал, видимо Qt где - то цепляет их в хедер, просто это явно не видно, а так правила он не нарушает, вот все и собирается.... я об этом не подумал, а правила нарушать нельзя... по этому поводу хорошая статья http://habrahabr.ru/blogs/cpp/50775/ да и стандарт об этом говорит.... ЗЫ:
Добавлено через 3 минуты и 25 секунд zim22, все правильно всем спасибо |
||||||||
|
|||||||||
null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 2 Всего: 12 |
Earnest, так и есть.... все даже явно видно.... в том же файле
|
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
что же ты статью прочитал, а выводов не сделал? Там есть отличный workaround как разделить на интерфейс\реализацию. Просто его надо немного доработать, например создав фейковый класс. |
|||
|
||||
kokorins |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 8.6.2007 Репутация: нет Всего: нет |
http://google-styleguide.googlecode.com/sv...nline_Functions
Тут написано как это реализовывать, чтобы всё было красиво и однообразно. |
|||
|
||||
null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 2 Всего: 12 |
Не в выводах дело, а в моей невнимательности, просто не заметил реализацию в хедере |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |