问题描述
|
如何在C ++中实现模板化方法?
我正在考虑在JVM中实现模板,并且已经为模板化类考虑了可能的实现方式,但是不确定方法。
例如,如果您这样做:
class Test
{
public static boolean isIterable<T>(T variable)
{
return T instanceof Iterable;
}
}
System.out.println(Test.isIterable(new int[] { 0 }));
我会创建Test
的版本吗? (在我的实现中,该类将这样命名:$g$Test$A_Java_lang_int
)
请忽略泛型的任何问题(例如仅需要装箱的对象),因为我打算删除它们。
我计划动态创建这些解析的模板,并跟踪引用的数量,以便在不使用它们时将其删除。我相信这是.Net的管理方式,尽管我很高兴在这里犯错!
解决方法
我是否将创建一个Test的版本来回复
int[]
?
本质上是。 C ++中的模板纯粹是一种编译时机制,它使用一种(标准化的)宏机制来为模板实例化每种类型的模板生成代码。
(由于专门化的可能性,C ++实际上做了很多事情,但这是要点。)
, 我建议尝试通过生成类来静态地做到这一点。您可能会发现http://trove.starlight-systems.com/很有趣,因为它具有生成原始集合的模板方法。例如TintLongHashMap这不依赖任何语言功能。
我建议您先尝试静态地进行操作,然后再尝试动态地进行操作,这要困难得多。