Size: a a a

2020 July 02

VO

Vyacheslav Olkhovche... in pro.cxx
кончилась память, кончился диск?
источник

A

Alex in pro.cxx
Посоветуйте, пожалуйста. Есть функция-фабрика, которая конструирует шаблонный класс. Проблема в том, что шаблонные параметры определяется в рантайме, они заранее не известны, и даже их (параметров) число может различаться. Функция может сконструировать нужный класс, но не может вернуть, потому что не известен возвращаемый тип на этапе компиляции. Есть какой-то приём для такой ситуации?
источник

A

Alex in pro.cxx
Грубый пример:
template <typename... Args>
class A {};

auto factory() {
  if (runtime_condition_1())
     return A<int, float>{};
  else if (runtime_condition_2())
     return A<std::string>{};
  else
     return A<void>{};
}
источник

D

Dmitriy in pro.cxx
Alex
Посоветуйте, пожалуйста. Есть функция-фабрика, которая конструирует шаблонный класс. Проблема в том, что шаблонные параметры определяется в рантайме, они заранее не известны, и даже их (параметров) число может различаться. Функция может сконструировать нужный класс, но не может вернуть, потому что не известен возвращаемый тип на этапе компиляции. Есть какой-то приём для такой ситуации?
Возвращать тип, способный объединить все те
-> unique_ptr для базового класса (от которого будет унаследован А)
-> std::any/variant
источник

A

Alex in pro.cxx
думал про указатель, но как восстановить информацию о шаблонных типах? Я же не могу сделать каст, если не знаю, во что.
источник

AN

Alexander N in pro.cxx
Vyacheslav Olkhovchenkov
кончилась память, кончился диск?
Похоже проще всё. Он просто сегфолтится рандомно
источник

D

Dmitriy in pro.cxx
Alex
думал про указатель, но как восстановить информацию о шаблонных типах? Я же не могу сделать каст, если не знаю, во что.
CRTP?
Динамический полиморфизм?
источник

AS

Alex Sandrov in pro.cxx
"шаблонные параметры определяется в рантайме" - если класс формируется на момент компиляции, разве такое возможно?
источник

D

Dmitriy in pro.cxx
Alex Sandrov
"шаблонные параметры определяется в рантайме" - если класс формируется на момент компиляции, разве такое возможно?
Посмотри пример - имелось в виду иное)
источник

A

Alex in pro.cxx
Alex Sandrov
"шаблонные параметры определяется в рантайме" - если класс формируется на момент компиляции, разве такое возможно?
список возможных вариантов, конечно, известен, но он может быть довольно большим
источник

VO

Vyacheslav Olkhovche... in pro.cxx
Alexander N
Похоже проще всё. Он просто сегфолтится рандомно
ну либо у тебя дохнет железо, либо засохла термопаста, либо кончиласт память или диск
источник

AS

Alex Sandrov in pro.cxx
я в таких случаях разбираю шаблон рекурсивно
источник

AN

Alexander N in pro.cxx
Vyacheslav Olkhovchenkov
ну либо у тебя дохнет железо, либо засохла термопаста, либо кончиласт память или диск
На диске места много, память я ограничил
источник

VO

Vyacheslav Olkhovche... in pro.cxx
т.е. таки память кончилась. ну молодец
источник

A

Alex in pro.cxx
Alex Sandrov
я в таких случаях разбираю шаблон рекурсивно
?
источник

AN

Alexander N in pro.cxx
Vyacheslav Olkhovchenkov
т.е. таки память кончилась. ну молодец
Нет, я сказал билду юзать не более 8гб, он сам как-то исходя из этого поведение меняет
источник

O

Ofee in pro.cxx
Alex
думал про указатель, но как восстановить информацию о шаблонных типах? Я же не могу сделать каст, если не знаю, во что.
Допустимый набор типов известен принимающей стороне?
std::variant + std::visit
источник

O

Ofee in pro.cxx
Ofee
Допустимый набор типов известен принимающей стороне?
std::variant + std::visit
Иначе — виртуальные методы
источник

AS

Alex Sandrov in pro.cxx
я для функции делаю ещё один шаблонный класс, с переменным числом шаблонных параметров, который умеет кастовать к нужному типу
но вообще, наверно, лучше использовать any, чтобы не заморачиваться.
источник

A

Alex in pro.cxx
Мда, совсем не вяжется статический полиморфизм с динамическим
источник