ダックタイピングにおいてオブジェクトの保持ってできないんでしょうか?

import std.array;
import std.range;
class Hoge {
void f(R)(R r) if (isInputRange(R))
{
  auto app = appender(ranges_);
  app.put(r);
}
private:
XXX[] ranges_;// XXXは何にすれば?
}

インターフェイスを継承する方法しかないんですかね?