170 похожих чатов

Подскажите, можно ли как-то в С++ создать карту - строка

: конструктор типа в компайл тайме?

33 ответов

17 просмотров

Нет. У конструктора невозможно взять адрес, чтобы положить эту ссылку в словарь.

вместо конструктора бери просто фабрику - тогда можно

Можно. Она должна быть мутабельна? Дефолтный конструктор? Храните тип. Из него можно сконструировать объект. Или конкретный из конструкторов? Храните тип и типы-аргументы конструктора, чтобы выбрать соответствующую перегрузку

Skarn- Автор вопроса

Ты можешь создать создающую функцию и уже её помещать в словарь

Skarn- Автор вопроса
Ofee Oficsu
Можно. Она должна быть мутабельна? Дефолтный конст...

конструктор дефолтный без аргументов. Мне нужно, чтобы на основании переданной строки конструировался инстанс определенного класса

Skarn
конструктор дефолтный без аргументов. Мне нужно, ч...

А инстанс куда класть? В полиморфный указатель на базу? В вариант?

Skarn- Автор вопроса
Skarn
В полиморфный указатель на базу.

Тогда не вижу проблемы.. unordered_map<string, function<unique_ptr<base>()>> и вперёд

Skarn- Автор вопроса
Alexander Karaev
Тогда не вижу проблемы.. unordered_map<string, fun...

Проблема в том, что мапу желательно заполнить в компайлтайме.

Ilya Zviagin
Нет нельзя

Что означает "нельзя"? Мы можем хранить словарь ключ-тип. И мы можем дефолтно-сконструировать объект соответствующего типа. Другое дело, что это, вероятно, не то, чего хочет @skarndev

Ofee Oficsu
Что означает "нельзя"? Мы можем хранить словарь кл...

словарь "КЛЮЧЬ-КОНСТРУКТОР" мы не можем хранить, у конструктора нет типа.

Skarn
Проблема в том, что мапу желательно заполнить в ко...

Тут в слове "компайл-тайм" может быть очень много разных смыслов. Простейший вариант уже предложили, всё остальное - это оверинжиниринг для каких-то специфических ситуаций

Ilya Zviagin
словарь "КЛЮЧЬ-КОНСТРУКТОР" мы не можем хранить, у...

Именно поэтому я написал, что вместо этого нам достаточно хранить тип (а не сам конструктор), благодаря которому мы можем вызвать интересующий нас конструктор

Ofee Oficsu
Именно поэтому я написал, что вместо этого нам дос...

И каким это образом по типу ты собираешься конструктор звать?

Skarn
Проблема в том, что мапу желательно заполнить в ко...

Для CT поиска по строкам с идеальным хешем https://github.com/serge-sans-paille/frozen

Ilya Zviagin
И каким это образом по типу ты собираешься констру...

T{}, поскольку из постановки задачи известно, что нас интересует именно дефолтный конструктор

Ofee Oficsu
T{}, поскольку из постановки задачи известно, что ...

что-то чудеса какие-то... Ты можешь код определения словаря написать, пример? Ну и вызов конструктора по нему, тоже.

Ilya Zviagin
что-то чудеса какие-то... Ты можешь код определен...

Вместо траты времени на собственную реализацию, я сошлюсь на Boost. Благодаря NTTP с C++20 мы можем в качестве ключа оперировать в том числе и строками. Если интересует вопрос рантайм преобразования – автору вопроса потребуется написать дополнительную логику для хэширования, а из-за того, что это может быть сложнее, чем реально необходимо – я выше написал, что это, вероятно, не то, что нужно автору вопроса и порекомендовал бы взять вариант, предложенный @smertig

Ofee Oficsu
T{}, поскольку из постановки задачи известно, что ...

Так итого так можно делать ? А что значением в мапе будет ? typeid(тип) ?

Aleksei Budyakov
Так итого так можно делать ? А что значением в мап...

Это будет особая мапа. Что то типа type_list<pair<compile_time_string("T1"), T1>, pair<compile_time_string("T2"), T2>, pair<compile_time_string("T3"), T3>, ...>

Ilya Zviagin
А T1, T2 ... - это что?

Типы, конструкторы которых мы хотим вызывать

Kirill Bolshakov
Чё эт?

Ну вот так... Попробуй , напиши.

Kirill Bolshakov
Это будет особая мапа. Что то типа type_list<pair<...

Это можно оформить рекурсивным шаблоном? (и макросами?)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта