scala 抽象クラスでは、コンテキスト バウンドを定義したい場合、たとえば [T: ClassTag] をパラメーターで使用できますが、これはトレイトでは不可能です。
trait Foo[T: ClassTag]
Error:(11, 35) traits cannot have type parameters with context bounds `: ...' nor view bounds `<% ...'
trait Foo[T: ClassTag]
^
次のように定義した場合:
trait Foo[T] {
implicit def ctg: ClassTag[T] = implicitly[ClassTag[T]]
}
object Bar extends Foo[Int]
Bar 内で ctg を読み取ろうとすると、暗黙的なパラメーターが末尾再帰になるため、StackOverflowError がトリガーされます。
では、サブクラスをコンテキスト バインドに自動的に公開するトレイトで ctg を定義できるようにする最善の方法は何でしょうか?