テンプレートと部分的な特化で遊んでいますが、書き方がわからない特化が 1 つあります... 読みやすくするためにコードを単純化します。
考えてみよう
template <typename T>
class x
{
...
};
通常、私は次のように専門化できます。
class x<a_type>
{
...
};
テンプレート タイプでも機能します。
template <typename T>
class x<std::vector<T>>
{
...
}
ここで、テンプレート化されたクラスにネストされた型の特殊化を行いたいと思います:
template <typename T>
class y
{
struct nested_type
{
y a_member;
};
...
};
// Here comes the specialization
template <typename T>
class x<y<T>::nested_type>
{
...
};
これは失敗します。y::nested_type の前に 'typename' を入れようとしましたが、問題は解決しませんでした。コンパイラ エラーは次のとおりです。
type/value mismatch at argument 1 in template parameter list for ‘template <class T> struct x’
私がやりたいことは論理的に思えますが、それが可能かどうかはわかりません。g++-4.5 で C++0x を使用しています。そのような特殊化を書くための正しい構文を知っている人はいますか?