Здравствуйте, Максим Рогожин, Вы писали:
МР>В C++ имеется механизм template metaprogramming. В C#, Java нет какого механизма (нету ведь?). Вопрос в том какие преимущества по сравнению с C#, Java дает плюсам шаблонное метапрограммирование?
Для этого нужно попытаться решить какую-нибудь практическую задачу. Например, реализацию векторно матричных операций для игровых/графических движков. Например, в C++ достаточно реализовать пару тройку наблонных классов и операций между ними:
template <size_t N, typename = double> class Vector;
template <size_t M, size_t N, typename = double> class Matrix;
template <size_t N, typename = double> class Quaternion;
Получается компактно и максимально эффективно.
Следующиющий шаг — попробовать сделать то же самое на C# или на Java, испытать разочарование после жестокого облома и реализовать сначала все возможные варианты классов, которые могут поотребоваться в средненьком игровом движке:
class Vector2Double;
class Vector2Float;
class Vector3Double;
class Vector3Float;
class Vector4Double;
class Vector4Float;
class Matrix2x2Double;
class Matrix2x2Float;
class Matrix3x3Double;
class Matrix3x3Float;
class Matrix3x4Double;
class Matrix3x4Float;
class Matrix4x4Double;
class Matrix4x4Float;
class Quaternion2Double;
class Quaternion2Float;
class Quaternion3Double;
class Quaternion3Float;
Затем реализовать все возможные варианты операций между этими классами, для чего, прошу заметить придется написать строк кода на пару порядков больше, чем в плюсовом варианте.
Ну и, наконец, попробовать заиспользовать все это говнишко, пардон за мой французский, в какой-нибудь реальной игрухе и, после замеров FPS, понять, что все это время было потрачено впустую.