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