Здравствуйте, Shmj, Вы писали:
S>В последнее время думаю что не так с C++
А в C++ есть дженерики? По уму можно изначально пользовать дженерики, а когда отладились перевели на шаблоны.
Или условную компиляцию для Debug дженерики для Release шаблоны.
Зато в отладчике интеллисенсе и прочие плюшки статической компиляции
Например в C++/CLI можно использовать и дженерики и шаблоны
Generics and Templates (C++/CLI)
В С# есть
Generic math
C# 11.0: Generic Math, C# Operators and Static Abstract/Virtual Interface Members
Смысл использовать перегрузку операторов как метод интерфейса
public interface IAddition<T> where T : IAddition<T>
{
static abstract T operator +(T left, T right);
}
public class Person : IAddition<Person>
{
public int Age { get; set; }
public static Person operator +(Person left, Person right)
{
return new Person { Age = left.Age + right.Age };
}
}
Now, with our new IAddition<T> interface, you can implement a generic Add method like you see it in the code snippet below. Note the generic type constraint that uses the new IAddition<T> interface.
public class Additions
{
public static T Add<T>(T x, T y) where T : IAddition<T>
{
return x + y;
}
}
This means now that you can use that generic Add method with Person objects. You can see this in the code snippet below.
var thomas = new Person { Age = 26 };
var julia = new Person { Age = 24 };
Person personResult = Additions.Add<Person>(thomas, julia);
var age = personResult.Age; // age is 50;