返回类型真的很长的表达

时间:2012-03-24 11:07:55

标签: c++ c++11 return-type

我有以下功能:

inline auto iterateSomething(obj & o)
{
    auto iterators = baseIterator(o);
    auto tranformer = boost::bind(transofrmToSomething, _1, o);
    typedef boost::transform_iterator<decltype(tranformer), decltype(iterators.first)> iterator_t;
    iterator_t begin(iterators.first, tranformer);
    iterator_t end(iterators.second, tranformer);
    return std::make_pair(begin, end);
}

正如你所看到的,我不知道返回值,即使我把int放在那里,然后从错误信息中复制类型,它是一个非常长的类型...
有没有办法将返回类型指定为函数中唯一返回的类型?是否有任何解决方法不涉及返回类型中的巨大类型?

2 个答案:

答案 0 :(得分:2)

我认为你应该做Raymond Chen在评论中提出的建议:

  

将typedef移到函数外部。然后你可以用它来声明返回类型。

如果Raymond发布了一个答案,那么它应该被优先考虑接受 - 我发布这个以便bitmask的答案不是唯一的答案,因为我觉得它比疾病更糟糕。

答案 1 :(得分:0)

如果您不希望移出typedef

auto getIt = [] (obj& o, bool getEnd) {
  return boost::transform_iterator<
           decltype(boost::bind(transofrmToSomething, _1, o)),
           decltype(baseIterator(o).first)
         >(
           getEnd ? baseIterator(o).second : baseIterator(o).first,
           boost::bind(transofrmToSomething, _1, o)
         );
}

auto iterateSomething = [] (obj & o) {
  return std::make_pair(getIt(o,false), getIt(o,true));
}