繁体   English   中英

返回类型真的很长的表达

[英]Return type really long expression

我有以下功能:

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放在那里,然后从错误消息中复制类型,它是一个非常长的类型...
有没有办法将返回类型指定为函数中唯一返回的类型? 是否有任何解决方法不涉及返回类型中的巨大类型?

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

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

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

如果您不希望将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));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM