c++ - studio - ¿Por qué los espacios de nombres no pueden ser parámetros de plantilla?
visual studio installer (2)
Entiendo que los espacios de nombres no pueden ser parámetros de plantilla. Vea la pregunta, "plantilla especializada en un espacio de nombres" :
Dado:
namespace A { class Foo; class Bar; } namespace B { class Foo; class Bar; }
Quiero crear una plantilla para una clase en el espacio de nombres
A
oB
modo que funcione lo siguiente:
template<name> class C { name::Foo* foo; name::Bar* bar; };
Me preguntaba por qué este es el caso. Entiendo que las plantillas no son estructuras, pero ¿existe alguna limitación técnica en el diseño del compilador? ¿O hay alguna compensación significativa para implementar esta funcionalidad?
Cuando Bjarne Stroustrup comenzó a hablar de plantillas en reuniones de estándares de C ++, mencionó los espacios de nombres como parámetros de plantilla. La reacción fue escéptica, en parte porque los espacios de nombres en sí mismos eran tan nuevos, y temíamos combinar dos cosas que no entendíamos.
Esto sería:
- (IMO) Inapropiado: Los espacios de nombres evitan los choques de nombres. El polimorfismo está fuera de su carta.
- Innecesario: No lograría nada que no se pueda hacer con estructuras.
- Posiblemente difícil: un espacio de nombres no es una entidad completa e independiente. Se pueden declarar diferentes miembros de un espacio de nombres en diferentes encabezados e incluso diferentes unidades de compilación.