我有一个模板类template<typename T, typename R>
。R 是vector<T*>
或类型list<T*>
。
我希望我的类重载[]
运算符,这样如果它是一个向量,我将使用内置[]
运算符来提高效率,如果它是一个列表,我将使用迭代器来实现它。
对我来说,这听起来像是模板专业化的工作,所以我想写这样的东西:
template<typename T, typename R>
T& tContainer_t<T, R>::operator[]( unsigned i )
{
//TODO with iterators
}
template<>
T& tContainer_t::operator[]<T, std::vector<T*> >( unsigned i )
{
// TODO with built in [] operator
}
这是错误的,编译器不允许这样做。
有没有办法让它工作,或者我应该typeid()
在运行时区分这两个对象并采取相应的行动?