首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >增量助推::变量值

增量助推::变量值
EN

Stack Overflow用户
提问于 2016-05-30 13:36:45
回答 1查看 358关注 0票数 2

我有一个变量,不同的类型都实现了operator++。我想直接在变量变量上应用增量。有什么简单的方法吗?或者让我把它应用在每种类型的开关上?

带有stl迭代器的简单示例

代码语言:javascript
运行
复制
typedef boost::variant<
  std::vector<double>::iterator,
  std::vector<double>::reverse_iterator,
  std::set<double>::iterator,
  std::set<double>::reverse_iterator
> AnyIterator;

void incr(AnyIterator& ai)
{
  ++adi; // this doesn't compile: no match for operator++ blah blah blah

  // Have I really to write this kind of ugly thing ?
  if(ai.type() == typeid(std::vector<double>::iterator))
    ++boost::get<std::vector<double>::iterator>(ai);
  else if(ai.type() == typeid(std::vector<double>::reverse_iterator))
    ++boost::get<std::vector<double>::reverse_iterator>(ai);
  else if(ai.type() == typeid(std::set<double>::iterator))
    ++boost::get<std::set<double>::iterator>(ai);
  else if(ai.type() == typeid(std::set<double>::reverse_iterator))
    ++boost::get<std::set<double>::reverse_iterator>(ai);
}

注:我使用gcc 4.8.1和Boost 1.57。我不想要C++11的解决方案,我不能使用它,因为它与老gcc版本兼容。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-30 13:52:29

您可以定义一个泛型函子,然后在该函子中使用boost::apply_visitor

代码语言:javascript
运行
复制
namespace detail {
struct incrementer {
    template< typename T >
    void operator()(T& x) const { ++x; }
    typedef void result_type;
};
}

void incr(AnyIterator& ai)
{
  boost::apply_visitor(detail::incrementer(),ai);
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37527086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档