この質問を読んで疑問に思いました: クラス テンプレートのオーバーロードを禁止する技術的な理由はありますか?
オーバーロードとは、たとえば、同じ名前で異なるパラメーターを持つ複数のテンプレートを持つことを意味します。
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++ でこれが不可能な「良い」(つまり技術的な) 理由はありますか?