[英]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.