使用`decltype`获取迭代器的类型

时间:2019-07-18 08:16:39

标签: c++ decltype

我想使用(模板)类型A的对象获取迭代器的类型

typedef decltype(A::begin) A_iterator;

但是,这给出了

  

无法确定要使用哪个重载函数实例” std :: vector <_Ty,_Alloc> :: begin“

Astd::vector<...>时。

我认为编译器无法区分const函数begin和非{const函数begin。我该如何在这两者之间进行选择?

1 个答案:

答案 0 :(得分:4)

假设A是一种类型,而不是变量标识符。

using A_iterator = decltype(std::declval<A>().begin());

或者只是...

using A_iterator = typename A::iterator;

如果A是变量标识符:

using A_iterator = decltype(A.begin());