Сообщение Re: Оператор приведения от 04.07.2019 10:39
Изменено 04.07.2019 14:06 rg45
Re: Оператор приведения
Здравствуйте, Videoman, Вы писали:
V>Казалось бы, задачу можно решить определив оператор приведения типа у класс Container, но вышеописанные выражения являются вызовами конструкторов инициализации, а следовательно у классов со сложными конструкторами (типа string) сначала срабатывают перегрузки конструкторов, а не операторов приведения типа. Следовательно нужная схема не работает. Как-нибудь просто можно решить задачу в рамках современного С++ ?
Все должно работать, лишь бы только не возникало коллизии между разными пользовательскими преобразованиями. Единственное что, наверное, операторы преобразования стоит объявлять явными (с ключевым слово "explicit"), ну и инициализацю оформлять через скобки, а не через знак присваивания.
V>Казалось бы, задачу можно решить определив оператор приведения типа у класс Container, но вышеописанные выражения являются вызовами конструкторов инициализации, а следовательно у классов со сложными конструкторами (типа string) сначала срабатывают перегрузки конструкторов, а не операторов приведения типа. Следовательно нужная схема не работает. Как-нибудь просто можно решить задачу в рамках современного С++ ?
Все должно работать, лишь бы только не возникало коллизии между разными пользовательскими преобразованиями. Единственное что, наверное, операторы преобразования стоит объявлять явными (с ключевым слово "explicit"), ну и инициализацю оформлять через скобки, а не через знак присваивания.
Re: Оператор приведения
Здравствуйте, Videoman, Вы писали:
V>Казалось бы, задачу можно решить определив оператор приведения типа у класс Container, но вышеописанные выражения являются вызовами конструкторов инициализации, а следовательно у классов со сложными конструкторами (типа string) сначала срабатывают перегрузки конструкторов, а не операторов приведения типа. Следовательно нужная схема не работает. Как-нибудь просто можно решить задачу в рамках современного С++ ?
Все должно работать, лишь бы только не возникало коллизии между разными пользовательскими преобразованиями. Единственное что, наверное, операторы преобразования стоит объявлять явными (с ключевым слово "explicit"), ну и инициализацю оформлять через скобки, а не через знак присваивания.
Вот: https://ideone.com/xRSCq8
V>Казалось бы, задачу можно решить определив оператор приведения типа у класс Container, но вышеописанные выражения являются вызовами конструкторов инициализации, а следовательно у классов со сложными конструкторами (типа string) сначала срабатывают перегрузки конструкторов, а не операторов приведения типа. Следовательно нужная схема не работает. Как-нибудь просто можно решить задачу в рамках современного С++ ?
Все должно работать, лишь бы только не возникало коллизии между разными пользовательскими преобразованиями. Единственное что, наверное, операторы преобразования стоит объявлять явными (с ключевым слово "explicit"), ну и инициализацю оформлять через скобки, а не через знак присваивания.
Вот: https://ideone.com/xRSCq8