![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Lukkoye |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 23.3.2013 Репутация: 1 Всего: 1 |
Я на самом деле так же делаю, по двум причинам: 1. Код проще написать, и проще потом прочитать. 2. Независимость от порядка инициализации единиц трансляции. Однако, довольно странно читать "напрямую сделать это нельзя" , когда незадолго до вас уже указали способ, "как это сделать можно". |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
Можно, и самый первый ответ в этой теме является верным. |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Вообще-то, это последняя версия класса Singleton class Singleton { public: static Singleton & getInstance() { static singleton s; return s; } private: // constructors and destructors } Добавлено @ 14:10 Здесь вообще конфронтация. Изначальная формулировка задачи "Требуется создать внутри статический член этого вложенного класса.". Дырбулышург. Делайте вложенным классом подобие Singleton, для разнообразия попробуйте его как static class И очень многое получите. А вообще, мне просто не было надобности работать с С++ и с шаблонами, тоже мне задача, я работал на C++ как с чистым Cшником. Поэтому не было так весело! Это сообщение отредактировал(а) akizelokro - 7.1.2014, 14:24 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Вообще, щас пики забивают на thread-safe экземпляр класса Singleton (спорят, какая реализация будет потокобезопасной).
Я так спьяну глянул, и понял, что будет последняя версия (которую я зачтил), и набросок которой привёл bsa/ Остальные пусть ждут стандартной версии компирела. Меня же больше в примере с singleton заинтересовали не откровения кучи прогеров и не приблуды, которыми они его в разных версиях компилеров пытались "расшифровать", а N-тоны (Double-tone, Three-tone and so on) -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
akizelokro, мой пример - это не зачаток "singleton". Просто в singleton используется тот же механизм. |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
В данном случае, задача линкера заткнуться и свести все эти инстанциации в одну. Тут тот же случай, что и с функциями. Тут нет явной инстанциации в заголовке, а значить ODR не нарушается. Добавлено @ 14:19
Это сообщение отредактировал(а) vinter - 9.1.2014, 14:21 |
|||
|
||||
| Lukkoye |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 23.3.2013 Репутация: 1 Всего: 1 |
Нет, не будет. Кстати, это свойство шаблонов используют для проворачивания трюка "объявить и туловище и реализацию свободной функции в хэдэре так, что бы не иметь проблем с линкером". Хотя лично я, для проворачивания аналогичного трюка использую статический метод обычного класса. Если объявить и определить статический метод прямо в декларации класса, то проблем с линкером так же не будет. |
|||
|
||||
| mabrarov |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 12.1.2011 Где: Казань Репутация: 8 Всего: 9 |
Коллеги, не "ткнете" ли меня (как автора первого ответа) туда, где сказано, что typename в данном случае имеет какое-то отношение к C++11. Думаю, разница м/у typename и class при использовании в шаблонах есть только в "Шаблонные параметры: typename и class. Есть ли разница?".
Там, где я подразумеваю тип (например, в шаблонах), я пишу typename, а не class. Так мне понятнее и логичнее (тип же не ограничивается классом). Тенденция, думается, в лучших традициях C++03 Добавлено через 8 минут и 15 секунд
Не проще ли inline-функции? Хотя в их случае компилятор волен выбрать любой вариант (а он может зависеть от препроцессора), что как бы намекает на дополнительную аккуратность при использовании inline-функций... |
||||||
|
|||||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
| Lukkoye |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 23.3.2013 Репутация: 1 Всего: 1 |
Нет, не проще. Потому что inline или нет - решает компилятор. Необходимость следить за этим вручную делает этот подход несопоставимо более сложным, чем простая и узнаваемая всеми программистами статическая функция член, которая не отягощает интеллект дополнительными думками ещё и о линкере. Это сообщение отредактировал(а) Lukkoye - 11.1.2014, 03:19 |
|||
|
||||
| nonaot |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 14.1.2014 Репутация: нет Всего: нет |
Модератор: Сообщение скрыто. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |