c ++模板方法

时间:2011-05-27 12:01:05

标签: java templates generics methods

如何在C ++中实现模板化方法?

我正在考虑在JVM中实现模板,并且已经考虑了模板类的可能实现,但我不确定方法。

例如,如果你做了:

class Test
{
    public static boolean isIterable<T>(T variable)
    {
        return T instanceof Iterable;
    }
}

System.out.println(Test.isIterable(new int[] { 0 }));

我会创建一个回复Test的{​​{1}}版本吗? (在我的实现中,类将被命名为:int[]

请忽略泛型的任何问题(例如只需要盒装对象),因为我打算删除它们。

我计划动态创建这些已解析的模板,并跟踪引用的数量,以便在不使用它们时删除它们。我相信这就是.Net管理它的方式,虽然我很高兴在这里出错!

2 个答案:

答案 0 :(得分:1)

我建议通过生成类来静态地执行此操作。您可能会发现http://trove.starlight-systems.com/很有趣,因为它具有生成其原始集合的模板方法。例如TintLongHashMap这不依赖于任何语言功能。

我建议你在尝试动态地进行静态处理之前先弄清楚如何做到这一点,这是非常困难的。

答案 1 :(得分:1)

  

我是否会创建一个回复int[]的测试版本?

基本上,是的。 C ++中的模板纯粹是一种编译时机制,它使用(glorified)宏机制为基于模板的代码生成代码,用于实例化它的每种类型。

(由于专业化的可能性,C ++实际上做得更多,但这是它的要点。)