阅读这个问题让我想知道:是否有不允许类模板重载的技术原因?
通过重载,我的意思是有几个具有相同名称但参数不同的模板,例如
template <typename T>
struct Foo {};
template <typename T1, typename T2>
struct Foo {};
template <unsigned int N>
struct Foo {};
编译器设法处理重载函数和函数模板,难道不能将相同的技术(例如名称修改)应用于类模板吗?
起初,我认为单独使用模板标识符时可能会导致一些歧义问题,但唯一可能发生的情况是在将其作为模板模板参数传递时,因此可以使用参数的类型来选择合适的超载:
template <template <typename> class T>
void A {};
template <template <unsigned int> class T>
void B {};
A<Foo> a; // resolves to Foo<T>
B<Foo> b; // resolves to Foo<N>
你认为这样的功能有用吗?是否有一些“好的”(即技术)原因导致这在当前的 C++ 中是不可能的?