2

这是一个关于decltype......的微不足道的问题我有这样的事情:

using namespace std;
template< typename BIt >
void dostuff(BIt first, BIt middle, BIt last)
{
    auto temp = *first;
    for_each(first, middle, [](decltype((temp)) el)
    {cout << el << " "; });
}

int main()
{
    std::vector<int> vi{11,22,33,44,1,2,3,4,5};
    dostuff(std::begin(vi), std::begin(vi) + 4, std::end(vi));
}

我如何避免使用临时.begin变量(如果取消引用一个空向量是合法的,除了是丑陋的 IDK :))?

4

1 回答 1

6

您可能正在寻找 (更详细,请注意) std::iterator_traits

特别是,这解决了typename std::iterator_traits<BIt>::value_type.

我不认为使用它有太多好处,它更冗长并且依赖于额外的包含,<iterator>. 如果您不想要 temp 变量,您可以很好地使用decltype(*first).

于 2013-08-13T21:07:32.650 回答