- 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>();
долбанный комитет
им проще запретить, чем продумать нормальный способ вызова шаблонного конструктора
я всегда буду нажимать предпросмотр
я всегда буду нажимать предпросмотр
я всегда буду нажимать предпросмотр
явно указать шаблонные параметры конструктора нет возможности, потому что by design невозможно вызвать конструктор
так что придется передавать аргумент, например, boost::mpl::identity<>
Все чего нет в крестах - не нужно.
P.S. Я всегда буду читать комментарии и документацию по теме перед тем как писать всякую хуйню. Я только что почти запилил boost::mpl::identity<>, осталось только typedef T type добавить в мой base::type...
например,
я сейчас пересматриваю идеологию нашей асинхронной вермишели, и вот в одном месте понадобилось 1) чтобы базовый класс на этапе конструктора владел информацией о типе своего реального потомка (чтобы вывести тип коллбека) и при этом 2) CRTP не подходит, т.к. нужен полиморфизм в пределах очереди базовых классов
я еще пока не уверен в том, что получается, но и по старому мне тоже не нравится (каждый потомок после своего конструктора сейчас требует отдельного вызова set_completion_handler()), надоело тащить этот хвост, конструктор неплохое место, чтобы задать сразу все
Да даже указатель сойдет, это я тупил сильно, и городил свои костыли ;)
> CRTP не подходит
А CRTP чем мешает полиморфизму? Просто добавить еще один промежуточный шаблонный класс между base и derived. Он и тип будет знать и полиморфизм не порушит. P.S. Хотя смотрится это страшнее ;(