- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
struct base {
template <class Foo>
base() {}
};
struct derived {
derived()
: base::base<int>() // why not?? WHHYYYY?
{}
};
base b1 = base::base<int>();
base b2<int>();
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+14
struct base {
template <class Foo>
base() {}
};
struct derived {
derived()
: base::base<int>() // why not?? WHHYYYY?
{}
};
base b1 = base::base<int>();
base b2<int>();
долбанный комитет
им проще запретить, чем продумать нормальный способ вызова шаблонного конструктора
defecate-plusplus 09.03.2013 20:29 # +1
я всегда буду нажимать предпросмотр
я всегда буду нажимать предпросмотр
я всегда буду нажимать предпросмотр
roman-kashitsyn 09.03.2013 20:33 # +4
defecate-plusplus 09.03.2013 20:35 # +1
явно указать шаблонные параметры конструктора нет возможности, потому что by design невозможно вызвать конструктор
так что придется передавать аргумент, например, boost::mpl::identity<>
LispGovno 09.03.2013 20:43 # 0
Все чего нет в крестах - не нужно.
bormand 09.03.2013 22:21 # 0
bormand 09.03.2013 22:31 # +2
bormand 09.03.2013 22:40 # +1
bormand 09.03.2013 22:44 # +1
P.S. Я всегда буду читать комментарии и документацию по теме перед тем как писать всякую хуйню. Я только что почти запилил boost::mpl::identity<>, осталось только typedef T type добавить в мой base::type...
bormand 09.03.2013 22:50 # +1
defecate-plusplus 09.03.2013 22:54 # +1
например,
я сейчас пересматриваю идеологию нашей асинхронной вермишели, и вот в одном месте понадобилось 1) чтобы базовый класс на этапе конструктора владел информацией о типе своего реального потомка (чтобы вывести тип коллбека) и при этом 2) CRTP не подходит, т.к. нужен полиморфизм в пределах очереди базовых классов
я еще пока не уверен в том, что получается, но и по старому мне тоже не нравится (каждый потомок после своего конструктора сейчас требует отдельного вызова set_completion_handler()), надоело тащить этот хвост, конструктор неплохое место, чтобы задать сразу все
defecate-plusplus 09.03.2013 23:05 # +1
bormand 09.03.2013 23:14 # +1
Да даже указатель сойдет, это я тупил сильно, и городил свои костыли ;)
> CRTP не подходит
А CRTP чем мешает полиморфизму? Просто добавить еще один промежуточный шаблонный класс между base и derived. Он и тип будет знать и полиморфизм не порушит. P.S. Хотя смотрится это страшнее ;(
guest 06.02.2017 23:22 # 0