我正在尝试使用模板为任何C ++集合创建一个适配器。
我需要使用模板模板参数,所以我可以使用适配器:
CollectionAdapter<std::vector<int>> a;
并不喜欢:
CollectionAdapter<std::vector<int>,int> a;
一次需要两个模板参数。
我写了这堂课:
template <
template <class U> class T
>
class CollectionAdapter {
public:
typedef T<U> ThisCol;
typedef void iterator;
CollectionAdapter() {}
bool add(ThisCol& c,const U& i);
bool remove(ThisCol& c,const U& i);
U& getByIndex(int i);
ThisCol instantiate();
iterator getIterator(ThisCol& c);
};
然而,visual studio编译器抛出了这个错误:
error C2065: 'U' : undeclared identifier
对于这一行:
typedef T<U> ThisCol;
我做错了什么?
答案 0 :(得分:2)
我认为您不需要模板模板参数。您可以简化代码:
template <class T>
class CollectionAdapter
{
public:
typedef T ThisCol;
typedef typename T::value_type value_type;
//typedef void iterator; // what?? did you mean void*?
typedef void* void_iterator; // but not sure what the use of this is.
// you might need the container's iterator types too
typedef typename T::iterator iterator
typedef typename T::const_iterator const_iterator
CollectionAdapter() {}
bool add(T& c,const value_type& i);
bool remove(T& c,const value_type& i);
value_type& getByIndex(int i);
const value_type& getByIndex(int i) const;
ThisCol instantiate();
iterator getIterator(T& c);
};