【问题标题】:Get the type of the iterator using `decltype`使用`decltype`获取迭代器的类型
【发布时间】:2019-07-18 08:16:39
【问题描述】:

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

typedef decltype(A::begin) A_iterator;

但是,这给出了一个

无法确定要使用的重载函数“std::vector<_ty _alloc>::begin”的实例

Astd::vector&lt;...&gt;

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

【问题讨论】:

    标签: c++ decltype


    【解决方案1】:

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

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

    或者只是……

    using A_iterator = typename A::iterator;
    

    如果A 是变量标识符:

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

    【讨论】:

    • 类似std::declval&lt;const A&gt;().begin()typename A::const_iterator
    猜你喜欢
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 2011-03-02
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多