Shi*_*C G 0 c++ templates visual-studio
以下代码在visual studio 2009中给出了编译错误.
#include <iterator>
#include <vector>
template <class T1, class T2 >
class A
{
public:
typename std::vector<std::pair<T1,T2> >::iterator iterator;
std::pair<iterator, bool > foo(const std::pair<T1 ,T2> &value_in);
};
Run Code Online (Sandbox Code Playgroud)
任何人都可以对它有所了解吗?这是错误.
error C2327: 'A<T1,T2>::iterator' : is not a type name, static, or enumerator
Run Code Online (Sandbox Code Playgroud)
小智 9
这声明iterator是一个变量(不是一个类型):
typename std::vector<std::pair<T1,T2> >::iterator iterator;
Run Code Online (Sandbox Code Playgroud)
你的意思是?
typedef typename std::vector<std::pair<T1,T2> >::iterator iterator;
Run Code Online (Sandbox Code Playgroud)
更多信息:如果您想了解什么typename呢,读了大约之间的差异依赖和非依赖的名字.如果您的类型与特定容器密切相关,则该容器的typedef可能很有用,因为STL模式使用了许多可以轻松访问的嵌套typedef(V::value_type如下所示).这具有额外的优势,即随着代码的发展需要更少的更改,例如使用不同的分配器(向量的第二个模板参数),只需要一次编辑.
template<class T1, class T2>
struct A {
private:
// you may or may not want to expose these convenience types
typedef std::pair<T1, T2> P;
typedef std::vector<P> V;
public:
typedef typename V::value_type value_type;
typedef typename V::iterator iterator;
std::pair<iterator, bool> foo(value_type const& value_in);
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
802 次 |
| 最近记录: |