|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
Было так: Код: plaintext 1.
Но потом Foo перестал быть классом: Код: plaintext 1.
И предобъявление перестало работать. Пришлось написать #include там где оно не нужно. Можно это как-то обойти? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2020, 16:50 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
Можно, конечно, сделать так: Код: plaintext 1.
Но это как-то не особо что ли… Конструкторы, наверное нужно будет написать. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2020, 17:03 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
petrav, >Но потом Foo перестал быть классом: Разные типы с одним именем? Зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2020, 17:21 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
petrav Было так: Код: plaintext 1.
Но потом Foo перестал быть классом: Код: plaintext 1.
И предобъявление перестало работать. Пришлось написать #include там где оно не нужно. Можно это как-то обойти? У Вас используется явная специализация для шаблонного класса Bar, поэтому необходимо подключить файл с реализацией Bar. Раньше я так понимаю был forward declaration, но в таком виде оно сработает без подключения заголовочника для Bar только если использовать описание методов со ссылками/указателями на Bar, иначе будет ошибка компиляции ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2020, 17:22 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
petravМожно это как-то обойти? То место, где использовалось Foo, перековать на темплейт с Foo в качестве параметра. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2020, 17:30 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravМожно это как-то обойти? То место, где использовалось Foo, перековать на темплейт с Foo в качестве параметра. Неожиданное решение, но неподходящее. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2020, 19:28 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
https://stackoverflow.com/questions/20108568/c-forward-declare-using-directive Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2020, 11:53 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
Barlone https://stackoverflow.com/questions/20108568/c-forward-declare-using-directive Код: plaintext 1. 2.
Хоть один пояснил для новичка. Остальные снобы какие то) Я гуглл, гуглил но так и не понял сперва что тут шаблонами пахнет) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2020, 12:16 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
PetroNotC SharpХоть один пояснил для новичка. Так petrav вроде преподаватель, а не новичок. Код: sql 1. 2. 3. 4. 5.
Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2020, 12:31 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Я новичок в плюсах))) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2020, 12:56 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
Так топик-то не твой. ))) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2020, 13:22 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Так топик-то не твой. ))) И не твой. Прошлый топик ты тоже пытался быть воспитателем) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2020, 14:10 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
Ну кому-то же надо этим заниматься после того как облажались родители и школа. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2020, 14:16 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Я сказал что Barlone ответил лучше. Ничего личного. Закругляйся. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2020, 14:20 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov PetroNotC SharpХоть один пояснил для новичка. Так petrav вроде преподаватель, а не новичок. Код: sql 1. 2. 3. 4. 5.
И весь функционал из .cpp перенести в .h? Хотели уменьшить количество зависимостей, но наоборот, кардинально увеличили это количество. Очень умно, вообще отлично, медаль за находчивость. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2020, 14:26 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
petravИ весь функционал из .cpp перенести в .h? Во-первых, это вовсе не обязательно. Во-вторых, именно для этого и существую предкомпилированные заголовки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2020, 14:50 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravИ весь функционал из .cpp перенести в .h? Во-первых, это вовсе не обязательно. Ну например. Код: plaintext 1. 2. 3.
Далее Foo становится псевдонимом (typedef). doSomething() делаем шаблоном? Но как же нам не перенести тогда тело функции в заголовочник? Да и вообще, делать что-то шаблоном (хотя шаблон там не нужен) только что бы убрать зависимость -- не кажется удачной идеей. Хотя я где-то делал так, но то был закрытый метод класса и его тело шаблонного метода, да, было в .cpp. Dimitry Sibiryakov Во-вторых, именно для этого и существую предкомпилированные заголовки. Не тот случай, файл часто меняется. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2020, 16:21 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
Можно, конечно, попробовать явно инстанцировать этот шаблон. И тогда возможно его тело останется в .cpp. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2020, 16:43 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
petravДа и вообще, делать что-то шаблоном (хотя шаблон там не нужен) только что бы убрать зависимость -- не кажется удачной идеей. Функция, которая что-то делает с инстансом неизвестного типа, тоже не выглядит здраво. Намекает, что консерваторию неплохо бы переделать. Не всякую зависимость нужно убирать. Некоторые подобны ссылочной целостности в БД: предотвращают глобальный катаклизм после локальных (казалось бы) изменений. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2020, 17:37 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravДа и вообще, делать что-то шаблоном (хотя шаблон там не нужен) только что бы убрать зависимость -- не кажется удачной идеей. Функция, которая что-то делает с инстансом неизвестного типа, тоже не выглядит здраво. Намекает, что консерваторию неплохо бы переделать. Это стандартный приём программирования на С++. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Dimitry Sibiryakov Не всякую зависимость нужно убирать. Некоторые подобны ссылочной целостности в БД: предотвращают глобальный катаклизм после локальных (казалось бы) изменений. А можно реалистичный пример? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2020, 20:52 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
Barlone https://stackoverflow.com/questions/20108568/c-forward-declare-using-directive Код: plaintext 1. 2.
Да, спасибо! Странно, что я об этом не догадался. Ведь я же знал о такой возможности. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2020, 20:53 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
petravЭто стандартный приём программирования на С++. Forward declaration это обычный приём в любом ЯП. Но обычно он применялся с указателями и реальное объявление типа должно было следовать перед первым реальным применением этого указателя. Естественно, тип forward declaration тоже должен совпадать с реальным, потому что на его основе компилятор решает какие механизмы использовать "унутре". petravА можно реалистичный пример? DLL компилируется с функцией у которой параметр - указатель на целое. Приложение компилируется с "не совсем таким" заголовком и использует указатель на short. Формально сигнатуры совпадают, никаких предупреждений или ошибок, а результат - SegFault. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2020, 22:16 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravЭто стандартный приём программирования на С++. Forward declaration это обычный приём в любом ЯП. В C# есть forward declaration class? Я погуглил — вроде бы нету. Dimitry Sibiryakov Но обычно он применялся с указателями и реальное объявление типа должно было следовать перед первым реальным применением этого указателя. Естественно, тип forward declaration тоже должен совпадать с реальным, потому что на его основе компилятор решает какие механизмы использовать "унутре". Спасибо, но это понятно и очевидно. Dimitry Sibiryakov petravА можно реалистичный пример? DLL компилируется с функцией у которой параметр - указатель на целое. Приложение компилируется с "не совсем таким" заголовком и использует указатель на short. Формально сигнатуры совпадают, никаких предупреждений или ошибок, а результат - SegFault. ИМХО, пример неудачный. Он к С++ вообще отношения не имеет. Это скорее ошибка производственного процесса. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2020, 17:05 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
petravпример неудачный. Он к С++ вообще отношения не имеет. Почему? Типичный случай проблемы когда объявление чего-то в одном месте отличается от объявления в другом. Как раз для этого топика, где Foo в одном месте объявлено как class, а в другом внезапно как что-то другое. И это счастье, что подобная фигня обнаруживается уже при компиляции, а не вызывает падение уже готового приложения у пользователя. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2020, 17:23 |
|
Предобъявление typedef-а
|
|||
---|---|---|---|
#18+
petrav, >В C# есть forward declaration class? Я погуглил — вроде бы нету. = потому что неполный тип или работа с указателями это вчерашний день. Во первых статическая типизация наше все. Я ее люблю. Во вторых в дельфи есть предварительное объявление. Используется для решения зацикленности ссылок. Что решается у вас в данном топике, непонятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2020, 21:35 |
|
|
start [/forum/topic.php?fid=57&msg=39980572&tid=2017379]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 254ms |
total: | 383ms |
0 / 0 |