Anton
struct A
{
A(B b);
};
struct B
{
B(int, int);
};
Возмём простой случай. B можно без явного вызова конструктора заинитить?
Tom
Nikita
Anton
Anton
И при том без явного вызова конструктора B.
Ioann_
Reinterpret cast в помощь тебе, ну, наверное ?
Ioann_
Все зависит от того какая именно структура у B
Ioann_
У меня например в проекте есть структура D3, просто три дабла x y z. Но при этом можно обращаться и по индексу :)
Anton
Tom
Хитро... а возможно ли такое вообще в С++03
Tom
В С++11-то автоматом...
Ioann_
Ioann_
Tom
Не ну это читерством называется ;)
Anton
Причём конкретным.
Aidar
Пруфов что оно работает нет
Александр
Без variadic'ов совсем печально
Ioann_
Ioann_
Работает :)
Aidar
Ну это не пруф
Aidar
Зато есть пруфы что оно не работает
Aidar
Уб=не работает
Aidar
А частные случаи не нужны
Aidar
Ты же математик
Ioann_
Ну если ты про ub, то я про это написал выше. Хотя если честно я не знаю точно, гарантирует ли стандарт, что данные всегда будут одинаково варывниваться(без pragma align и т.п) и т.п Так как если этот момент нарыть, то это может быть и не ub.
Aidar
Это в любом случае уб
Aidar
Потому что ты реинтнрпреткастишь на тот тип который не был изначально
Ioann_
Но, ты еще просто код win32k не видел, частично утекший в нулевых. Там кажется, ребята не знают что такое стандарт :)
🦥Alex Fails
/cppref cast
FailsBot
Search results for "cast"
1. std::any_cast
2. std::bad_cast
3. std::bad_any_cast
4. const_cast conversion
5. static_cast conversion
6. dynamic_cast conversion
7. std::const_pointer_cast
8. std::static_pointer_cast
9. std::dynamic_pointer_cast
10. std::chrono::duration_cast
11. reinterpret_cast conversion
12. std::experimental::any_cast
13. std::chrono::time_point_cast
14. case label
15. As-if rule
16. std::map::at
17. std::array::at
18. std::deque::at
19. std::tuple_cat
20. std::string::at
21. std::vector::at
22. std::wstring::at
23. std::pmr::map::at
24. std::u16string::at
25. std::u32string::at
26. std::pmr::deque::at
27. std::pmr::string::at
Aidar
Что такое pmr
Aidar
Преднестровье?
Ruslan
😂
Ioann_
Причём конкретным.
А почему не сделать деф конструктор и сеттер ? Там просто потом создаешь временный объект вызываешь сеттер и дело в шляпе :?
Ioann_
Тогда ты минуешь конструктор с двумя интами
Aidar
Там параметры неизвестны
Roman
multi-index контейнеров в STL или Qt нет я так понимаю?
map<pair<K1, K2>, D> мне к сожалению не помогает, поскольку pair - по прежнему один ключ лишь состоящий из нескольких компонентов, по одному только K1 я не найду D
Ioann_
А, ты хочешь чтобы просто не было списка инициализации ?
Aidar
Это си++03
Ioann_
То есть конструктор вызвали, но он ничего не инитил ?
mefest
Ioann_
Это си++03
Я понял, просто вон та штучка в конструкторе, когда двоеточие пишешь так вроде называется.
mefest
Aidar
Сделай свой тип ключ
Aidar
Придумай как нибудь
mefest
Вообще тоже самое, просто дубли будут
Aidar
Определи хэш или оператор меньше
Aidar
И сделай поиск этих типоа
Александр
Александр
обертку запилить на вариадиках с N контейнерами
Roman
А надо наоборот?
угу, у одной структуры данных несколько разных индексов, т.е. ключей, по каждому из которых нужно уметь находить..
по старинке создать QMap<K1, D> и QMap<K2, QMap::iterator>?
Anatoly
только QMultiMap
Anatoly
поскольку K1 и K2 не ключи в классическом их понимании
mefest
Ruslan
mefest
В чем проблема указать одни данные у разных ключей?
Roman
Anatoly
ключ в классическом понимание однозначно идентифицирует сущность, в multi map для одного "ключа" допускается несколько значений
Roman
два контейнера
я так и собирался делать мол map<K1, D> и map<K2, map<K1,D>::iterator>
просто задаюсь вопросом нет ли альтернативного, более элегантного решения
Александр
можно сделать struct Key { std::optional<K1> key1; std::optional<K2> key2; } и перегрузить для него оператор == как равенство одного из двух полей. Правда тогда (a == b) && (b == c) != (a == c), но для мапы пойдёт
Roman
Anatoly
ну, подруби http://www.boost.org/doc/libs/1_64_0/libs/multi_index/doc/tutorial/index.html
Roman
Александр
Roman
ладно
Roman
оставлю как есть, класс с перегруженым operator[] и двумя мапами map<K1, D> и map<K2, map<K1,D>::iterator>
Berkus
Berkus
перфект форвардинг и варарги
Berkus
Berkus
расширения с готовым аст работают, чтобы его получить надо парсер править