小编Joh*_*ong的帖子

为什么我们需要Scala的CanBuildFrom中的From type参数

我正在尝试一组自定义容器函数,并从Scala的集合库中获取有关CanBuildFrom[-From, -Elem, -To]隐式参数的灵感.

在Scala的集合中,CanBuildFrom支持返回类型函数的参数化map.在内部,CanBuildFrom参数像工厂一样使用:map在它的输入元素上应用它的第一个顺序函数,将每个应用程序的结果提供给CanBuildFrom参数,最后调用CanBuildFrom的result方法来构建调用的最终结果map.

在我的理解中,-From类型参数CanBuildFrom[-From, -Elem, -To]仅用于apply(from: From): Builder[Elem, To]创建Builder具有一些元素的预初始化.在我的自定义容器函数中,我没有那个用例,所以我创建了自己的CanBuildFrom变体Factory[-Elem, +Target].

现在我可以有一个特质 Mappable

trait Factory[-Elem, +Target] {
  def apply(elems: Traversable[Elem]): Target
  def apply(elem: Elem): Target = apply(Traversable(elem))
}

trait Mappable[A, Repr] {
  def traversable: Traversable[A]

  def map[B, That](f: A => B)(implicit factory: Factory[B, That]): That =
    factory(traversable.map(f))
}
Run Code Online (Sandbox Code Playgroud)

和实施 Container

object Container …
Run Code Online (Sandbox Code Playgroud)

scala implicit

7
推荐指数
1
解决办法
304
查看次数

为什么boost的counting_iterator是const?

我需要一个自定义随机访问集合类的迭代器.我想使用迭代器std::sort.因为我是一个时间预算有限的C++新手,所以我想避免自己写整篇文章.

我的迭代器基本上只是一个简单的size_t.因此,我认为boost::counting_iterator可能是一个很好的匹配.一旦我完成了,Incrementable我必须意识到counting_iterator它将其引用类型定义为const Incrementable&.

虽然我仍然对很多C++感到困惑,但我相信这会阻止我使用迭代器,std::sort因为const迭代器不能用于交换集合元素.

这是一个问题:为什么要将boost::counting_iterator其引用类型定义为,const并且可能更重要的是,我应该使用什么呢?

c++ boost

5
推荐指数
1
解决办法
247
查看次数

标签 统计

boost ×1

c++ ×1

implicit ×1

scala ×1