Este article describe una forma, en C#, para permitir la adición de tipos de valores arbitrarios que tienen un operador + definido para ellos. En esencia, permite el siguiente código:Operaciones en tipos de valores arbitrarios
public T Add(T val1, T val2)
{
return val1 + val2;
}
Este código no compila ya que no hay garantía de que el tipo T tiene una definición para el operador '+', pero el efecto se logra con un código como éste:
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));
}
Siga el enlace para ver cómo la clase Num consigue esto. De todos modos, a la pregunta. ¿Hay alguna forma de lograr el mismo efecto en C o C++? Para los curiosos, el problema que trato de resolver es permitir que un kernel de CUDA sea más flexible/general al permitir que opere en más tipos.
Actualización: Para .NET, Marc Gravell ha realizado un utility library que resuelve el problema del operador de forma muy elegante.
Vale la pena señalar que la forma en que esto funciona con las plantillas de C++ se ha denominado como 'pato escribir' los tipos. Básicamente te escabulles del tipo que realmente quieres y en su lugar dices 'necesita soportar métodos y operaciones X, Y, etc.' También se usa como el mecanismo de tipo primario en ruby. – workmad3