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

标签 c++ decltype

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

typedef decltype(A::begin) A_iterator;

然而,这给出了一个

"cannot determine which instance of overloaded function "std::vector<_Ty, _Alloc>::begin" is intended"

Astd::vector<...> .

我认为编译器无法区分 const函数 begin和非 const函数 begin .如何在这两者之间做出选择?

最佳答案

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

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

或者只是……

using A_iterator = typename A::iterator;

如果 A 是一个变量标识符:

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

关于c++ - 使用 `decltype` 获取迭代器的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57090005/

相关文章:

c++ - 了解 OpenCL 在 OpenCV 中的用法(Mat/Umat 对象)

c++ - 在 C++ 中对两个用户定义的对象进行类型转换——可能吗?

c++ - x86、C++、gcc 和内存对齐

c++ - c++0x 中的返回值是否将通过右值引用传递?

c++ - 这个表达式是一个 xvalue 吗?

c++ - 如何使用 decltype 作为模板类返回类型的模板参数?

c++ - 如何重新分配 boost shared_ptr

c++ - 有没有办法 decltype 不可调用函数的结果?

c++ - 如果从 lambda 内部调用,无法实例化使用 decltype 推断返回类型的函数模板?

c++ - 如何规避 Intel C++ 编译器的 `decltype` 和继承问题?