¿Cómo puedo comprobar si un alias es una plantilla en D 2.0?Pruebe si un alias es una plantilla en D 2.0
template isTemplate(alias T)
{
enum bool isTemplate = ???;
}
Actualización:
Debería funcionar como:
struct S(T)
{
int opCall() { return 0; }
int opUnary(string s)() if (s == "-") { return 0; }
}
pragma(msg, isTemplate!(S)); //Should print true
pragma(msg, isTemplate!(S!(int))); //Should print false
pragma(msg, isTemplate!((S!(int)).opCall)); //Should print false
pragma(msg, isTemplate!((S!(int)).opUnary)); //Should print true
Como referencia, las cosas que No trabajo:
No puede usar ninguna expresión como
T!(...)
porque no sabe qué colocar en lugar de las elipsis.No se puede decir
&T
porque eso tampoco funciona si solo le dan un nombre de tipo antiguo.
Estoy courious para qué propósito esto puede ser útil. Usualmente para trabajar con algo (T) necesitas tener al menos un poco de conocimiento de lo que es. ¿Supongo que solo estás explorando el idioma? –
también puede consultar el tema relacionado - Obtenga la plantilla y sus parámetros de creación de instancias - http://www.digitalmars.com/d/archives/digitalmars/D/learn/Get_template_and_its_instantiation_parameters_17854.html –
@Michal: es útil porque necesito para saber si '__traits (allMembers, T)' devuelve un miembro real que existirá en tiempo de ejecución, o simplemente un nombre de plantilla que puede no existir en tiempo de ejecución. Gracias por el enlace también, pero desafortunadamente no respondió la pregunta. – Mehrdad