Scala 是否可以推迟宏展开,直到抽象类型绑定到特定类型

Scala 是否可以推迟宏展开,直到抽象类型绑定到特定类型,scala,reflection,macros,Scala,Reflection,Macros,我可能使用了不正确的术语,但下面是我想要实现的示例。假设我有以下宏: def generateField[T]: AnyRef = macro generateFieldImpl[T] def generateFieldImpl[T: c.AbsTypeTag](c: Context): c.Expr[AnyRef] = { /** * here I'm looking at the type T by reflection to see now many members it has

我可能使用了不正确的术语,但下面是我想要实现的示例。假设我有以下宏:

def generateField[T]: AnyRef =
  macro generateFieldImpl[T]

def generateFieldImpl[T: c.AbsTypeTag](c: Context): c.Expr[AnyRef] = {
/**
 * here I'm looking at the type T by reflection to see now many members it has
 * and based on that I'm generating TupleN[Array[Byte], ...](null, ...)
 * where N is number of members in class represented by type T
 */
}
我计划只使用case类作为T

当我将这个宏与case类一起使用时,它工作得很好,但现在我想添加一个抽象级别:

trait WithGeneratedField[T] {
  val _myField = generateField[T]
}
我遇到的问题是,当trait被声明时,宏会被扩展,此时T被称为抽象类型“T”。有没有办法推迟宏观扩张,直到我把这种特质融入到具体的东西中?例如:

case class MyClass(a: String, b: Int) extends WithGeneratedField[MyClass]

最后,我的目标是使用宏将生成的字段添加到案例类中。也许有更好的方法吗?

如果这在2.10.0中成为可能,我会感到惊讶

对于宏类型或宏注释(),应该非常简单。我们将在发布2.10.0-final后尽快开发这些新版本的宏,但很难预测预计的ETA。也许2012年的冬天到2013年的春天