Изврат с шаблонами. Часть 2 (последняя)

Leonid Kudryavtsev
Дата: 13.03.2015 20:25:24
Что-то мне

typedef void (*worker_t) (int*& x);

не нравится. Для типов < 4 байт, может работать не корректно. Будет помещать в стек int, а дальше... как ляжет порядок байт в машинном слове.... Я бы тогда через union делал. Что бы привести указатель к reference. Если ОЧЕНЬ хочется использовать reference. Если не хочется, нафиг их вообще. Зачем они нужны? )))
Leonid Kudryavtsev
Дата: 13.03.2015 20:27:10
а не, глючу. Оно же всегда указатель. Все нормально.
Dima T
Дата: 13.03.2015 20:37:53
Leonid Kudryavtsev
Dima T
Красота :)

Мне указывать * при обращении к данным, не напрягает

Мне тоже. Напрягает -> со структурами. Просто бесит, тут точка, там ->. Хочется однообразности.
Leonid Kudryavtsev
Т.ч. вообще не вижу смысла использовать reference и получать кучу дебильных ошибок и не очевидный код. IMHO

Не буду спорить. Опыта нет, вот и спрашиваю всякую ерунду. На С/С++ пишу мало, только то что нельзя сделать на других языках. В студенчестве маленько изучил, написал пару поделок, 10 лет прошло, надо переписать, сделаю dll-ку, обкатаю и еще на 10 лет забуду.
Dima T
Дата: 13.03.2015 20:41:36
Leonid Kudryavtsev
Для типов < 4 байт

типы не 4 байта я к указателям привел
	if(sizeof(T) == sizeof(int*)) {
		*(T*)&value = v;
	} else {
...

вдруг забуду и char подсуну, станет char*, непрактично, но не сглючит.
Dima T
Дата: 13.03.2015 20:54:06
Leonid Kudryavtsev
Что-то мне

typedef void (*worker_t) (int*& x);

не нравится.

Мне тоже, но как говорится "на безрыбье ...". Был бы опыт - написал бы красиво, а т.к. тут опыта нет - пишу как умею, потому честно назвал извратом. Будет работать и ладно, остальное спрячется, снаружи все красиво получилось, хоть снаружи извраты убрал и то вперед.

Спасибо за помощь.
Dima T
Дата: 13.03.2015 21:51:50
Leonid Kudryavtsev
Т.ч. вообще не вижу смысла использовать reference и получать кучу дебильных ошибок и не очевидный код. IMHO

Уже знаю про религиозную войну C vs C++. Лично мне не до кошерности, ну нет ссылок в С, что теперь? Ну нравится мне синтаксис ссылок (не надо на NULL проверять, точку писать вместо -> для элементов структуры по указателю), проблем не вижу, возможно не понимаю по неопытности, поищу в инете какие подвохи могут быть, разве что & забыть в параметрах указать.
Нужен STL так на С вообще не писать? Классы аля С++ тоже нафиг не нужны, надоели, слишком много лишних букав из-за них. Есть структуры, много где их нет, поэтому приходится делать классы ради одного единственного экземпляра. Нафиг он нужен в единственном экземпляре? В итоге получается та же самая глобальная переменная, только кошерно оформленная.
static вообще супер фишка.

PS Сугубо ИМХУ человека малознакомого с С/С++, просьба несогласных не начинать религиозную войну :)
Anatoly Moskovsky
Дата: 13.03.2015 22:49:56
Dima T
просьба несогласных не начинать религиозную войну :)

Ну что ж, вы сами попросили
asdasdfasdf
Дата: 14.03.2015 02:36:28
DimaT
проблем не вижу

1. ну в данном случае, не возможность сделать ссылку на тип void. Указатель можно
2. обязательно инициализировать ссылку даже в union. Указатель и другие типы можно не инициализировать
3. по коду программы не видно, как осуществляется передача по значению или по ссылки. Может C синтаксис чуть чуть и переусложнен (на один символ, вместо . нужно ->) но зато там сразу видно, что происходит.
и так далее

в общем, IMHO сильно не доделано, не додумано и половинчато. Очень много ООП вещей в C++ сделано не подумавши, как-то костыльно и без логики. Ваша же тема это замечательно и показывает. Когда в принципе нормальное, здоровое желание... реализуется через одно место.
Anatoly Moskovsky
Дата: 14.03.2015 03:01:52
asdasdfasdf
Очень много ООП вещей в C++ сделано не подумавши, как-то костыльно и без логики. Ваша же тема это замечательно и показывает. Когда в принципе нормальное, здоровое желание... реализуется через одно место.

Данная тема показывает, что какой бы ни был язык всегда можно простые вещи сделать через одно место.
Больше ничего не показывает.
И ничего связанного с ООП в этой теме нет.

Касательно того как правильно делать в C++, то все велосипеды давно изобретены - std::thread, std::bind, std::function (или аналоги из boost).
Dima T
Дата: 14.03.2015 09:48:57
Anatoly Moskovsky
Касательно того как правильно делать в C++, то все велосипеды давно изобретены - std::thread, std::bind, std::function (или аналоги из boost).

Доберусь до них когда-нибудь.
ИМХУ Любое изучение надо начинать с изобретения своего велосипеда, а потом можно готовый пересесть. Иначе много пробелов в знаниях получается, в устройство чужого велосипеда глубоко не полезешь, т.к. просто непонятно.