我正在尝试使用模板化参数专门化非模板类的模板成员函数:
#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
}
我收到一个错误“非法使用显式模板参数”。使此有效的正确语法是什么?
更新:
也许我过度简化了这个问题。我真正想做的是专门处理这种涉及依赖名称的情况,我认为这可能是在这里投入活动的原因。我最初的想法是像这样重载函数:
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 没有被调用。我怎样才能做到这一点?