テンプレート化されたパラメーターを使用して、非テンプレートクラスのテンプレートメンバー関数を特殊化しようとしています。
#include <array>
class C
{
public:
template<class Container>
void Foo( Container& )
{
// ...
}
};
template<class T, std::size_t N>
template<>
void C::Foo< std::tr1::array<T,N> >( std::tr1::array<T,N>& )
{
// special
}
これで「明示的なテンプレート引数の不正使用」というエラーが発生します。これを有効にするための正しい構文は何ですか?
更新:
おそらく、私は過度に単純化することによって問題を混乱させました。私が本当にやりたいのは、扶養家族の名前が関係しているこの1つのケースを特別に処理することです。これは、ここの作品にモンキーレンチを投げ込んでいる可能性があると思います。私の当初の考えは、関数自体をオーバーロードすることでした。
class C
{
public:
template<class Iter>
void Foo( Iter )
{
std::cout << "Normal\n";
}
template<class T, std::size_t N>
void Foo( typename std::tr1::array<T,N>::iterator )
{
std::cout << "Special\n";
}
};
int main()
{
C c;
std::tr1::array<int,10> a1;
c.Foo( a1.begin() ); // Doesn't print "Special"!
}
しかし、特別なFooは呼び出されません。どうやってやるの?