В этом article описывается способ на C#, позволяющий добавлять произвольные типы значений, для которых задан оператор +. В сущности, это позволяет следующий код:Операции по произвольным типам значений
public T Add(T val1, T val2)
{
return val1 + val2;
}
Этот код не компилируется, поскольку нет никакой гарантии, что тип Т имеет определение оператора «+», но эффект достигается с помощью кода, как это:
public T Add(T val1, T val2)
{
//Num<T> defines a '+' operation which returns a value of type T
return (new Num<T>(val1) + new Num<T>(val2));
}
Перейдите по ссылке, чтобы узнать, как класс Num достигает этого. В любом случае, на вопрос. Есть ли способ достичь такого же эффекта на C или C++? Для любопытных проблема, которую я пытаюсь решить, - позволить ядру CUDA быть более гибким/общим, позволяя ему работать с большим количеством типов.
Обновление: Для .NET Марк Гравелл сделал utility library, который очень удобно решает проблему оператора.
Стоит отметить, что способ, которым это работает с шаблонами C++, был назван «утиным типом» типов. В основном вы уклоняетесь от того, какой тип вы действительно хотите, и вместо этого говорите: «ему нужно поддерживать методы и операции X, Y и т. Д.». Он также используется в качестве механизма первичного типа в рубине. – workmad3 2008-10-21 14:15:59