Здравствуйте, Qbit86, Вы писали:
V>>Угу, у которого создание экземпляров происходит через рефлексию.
V>>Офигенный пример обсуждаемого "параметрического полиморфизма".
Q>Как он там создаётся вообще пофигу. Пример был про то, как вызывается метод констрейнта у экземпляра типа
Никак он не вызывается.
x.Equals(y) — это метод базового Object
bool ByteEqualityComparer::Equals(byte x, byte y) {
return x == y;
}
Тоже никак ничего не вызывается.
Кароч, пример был неудачный, хотя удачные примеры, таки, есть.
Но их малочисленность лишь подтверждает моё исходное утверждение:
Собсно, вообще таких алгоритмов мало, которые можно выразить в дотнете для value и ref-типов в генериках и они будут корректно работать в обоих случаях.
Q>Тебя почему-то 'ят обычные вызовы методов у типов, по которым параметризуются обобщённый код
Ну так я уже показал "цену" этому параметрическому полиморфизму и твоим "констрейнам" здесь:
template<typename T>
void Foo(T * t)
{
IQuxable * q = t;
IBarable * b = t;
q->Qux();
b->Bar();
}
Тут нечего далее обсуждать. Усё, припыли.
Даже если у тебя будет констрейн where T : IBarable<T> — я уверен, ты сам сможешь доработать мой сниппет до такого сценария.