Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 410 411 [412] 413 414 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#6166
,
|
|
|
|
Повстанець, по стандарту ты не должен добавлять ничего в std. Как трактуется этот конкретный случай - не помню.
|
|
Сообщ.
#6167
,
|
|
|
|
Цитата D_KEY @ Не должен и не могу -- разные вещи. Технически ничто не мешает. Повстанець, по стандарту ты не должен добавлять ничего в std. Как трактуется этот конкретный случай - не помню. |
|
Сообщ.
#6168
,
|
|
|
|
Цитата Повстанець @ Цитата D_KEY @ Не должен и не могу -- разные вещи. Технически ничто не мешает.Повстанець, по стандарту ты не должен добавлять ничего в std. Как трактуется этот конкретный случай - не помню. |
|
Сообщ.
#6169
,
|
|
|
|
Цитата D_KEY @ Повстанець, по стандарту ты не должен добавлять ничего в std. Как трактуется этот конкретный случай - не помню. Повстанець всё сделал законно Он ничего в std не добавляет, он специализирует Это разрешено, как разрешено специализировать std::swap |
|
Сообщ.
#6170
,
|
|
|
|
Цитата MyNameIsIgor @ Цитата D_KEY @ Повстанець, по стандарту ты не должен добавлять ничего в std. Как трактуется этот конкретный случай - не помню. Повстанець всё сделал законно Он ничего в std не добавляет, он специализирует Это разрешено, как разрешено специализировать std::swap ![]() Цитата 17.6.4.2.1 1 ... A program may add a template specialization for any standard library template to namespace std only if the declaration depends on a user-defined type and the specialization meets the standard library requirements for the original template and is not explicitly prohibited 2 The behavior of a C++ program is undefined if it declares — an explicit specialization of any member function of a standard library class template, or — an explicit specialization of any member function template of a standard library class or class template, or — an explicit or partial specialization of any member class template of a standard library class or class template. И даже в старом: Цитата 17.4.3.1/1 Such a specialization (complete or partial) of a standard library template results in undefined behavior unless the declaration depends on a user-defined name of external linkage and unless the specialization meets the standard library requirements for the original tem- plate |
|
Сообщ.
#6171
,
|
|
|
|
D_KEY, мда, не подумал про user-defined
|
|
Сообщ.
#6172
,
|
|
|
|
Допустим у нас есть пара типов (классов) A и B, как бы вы на топиковых языках реализовали тип (класс) C = A or B? Т.е.
![]() ![]() type A type B type C = A or B var x : C x = new A -- ok x = new B -- ok |
|
Сообщ.
#6173
,
|
|
|
|
А разве A и B не могут тупо наследоваться от C?
|
|
Сообщ.
#6174
,
|
|
|
|
Цитата Мяут-Настоящий @ А разве A и B не могут тупо наследоваться от C? Могут, если мы можем им это прописать, но ведь можем и не мочь =) |
|
Сообщ.
#6175
,
|
|
|
|
Цитата korvin @ Допустим у нас есть пара типов (классов) A и B, как бы вы на топиковых языках реализовали тип (класс) C = A or B? Не хватает требований, но на первый взгляд boost::variant |
|
Сообщ.
#6176
,
|
|
|
|
Цитата MyNameIsIgor @ Не хватает требований, но на первый взгляд boost::variant Эм... каких требований не хватает? Определение C = A or B вроде вполне однозначно. Впрочем если есть какие-то конкретные вопросы -- задавай. И пример с буст-вариантом неплохо бы увидеть, что ты имел в виду =) А так предложение Мяута годится для случая, если A и B -- наши классы и мы можем добавить им в предки класс C. |
|
Сообщ.
#6177
,
|
|
|
|
Ну пока я вижу два варианта:
С - некоторый контейнер, который может хранить различные сущности (например для передачи по сети) - в этом случае годится любой вариант с Variant-типом (простите за тавтологию )A и B - очень похожие сущности, но тогда им бог велел от общего класса наследоваться |
|
Сообщ.
#6178
,
|
|
|
|
Цитата korvin @ Эм... каких требований не хватает? Определение C = A or B вроде вполне однозначно. Впрочем если есть какие-то конкретные вопросы -- задавай. Ну, например, если имеем ![]() ![]() foo(a : A) и мы сделали ![]() ![]() var x : C x = new B то как должен вести себя ![]() ![]() foo(x) ? Цитата korvin @ И пример с буст-вариантом неплохо бы увидеть, что ты имел в виду =) Ну, чуть освобожусь - напишу что-нибудь... А что, кстати, надо? ![]() А пока можно доку посмотреть. Цитата korvin @ А так предложение Мяута годится для случая, если A и B -- наши классы и мы можем добавить им в предки класс C. Кто бы спорил... Тут, imho, всё зависит от требований, в том числе желаемого синтаксиса. |
|
Сообщ.
#6179
,
|
|
|
|
Ну вариантов много. Собственно, все то, что может каким-то образом заменить алгебраические типы данных.
union, union с тэгом, boost::variant, свой волосепедный variant через union и фичи нового стандарта, наследование... |
|
Сообщ.
#6180
,
|
|
|
|
void*
|