Я понимаю, что пространства имен не могут быть параметрами шаблона. Смотри вопрос, «шаблон специализируется на пространстве имен»:
Дано:
namespace A { class Foo; class Bar; } namespace B { class Foo; class Bar; }
Я хочу шаблон класса на пространстве имен
A
или жеB
так, что работает следующее:template<name> class C { name::Foo* foo; name::Bar* bar; };
Мне было интересно, почему это так. Я понимаю, что шаблоны не являются структурами, но есть ли техническое ограничение в дизайне компилятора? Или есть какой-то существенный компромисс для реализации этой функциональности?
Это было бы:
Когда Бьярн Страуструп впервые начал говорить о шаблонах на собраниях по стандартам C ++, он упомянул пространства имен в качестве параметров шаблона. Реакция была скептической, отчасти потому, что сами пространства имен были такими новыми, и мы боялись объединить две вещи, которые мы не понимали.