类型变量和C ++模板之间的差异

时间:2011-03-03 09:40:09

标签: c++ types

类型之间的差异是什么 变量和C ++的模板?提前谢谢

编辑

当函数

时,你可以在ML中看到类型变量
fun foo x = x

有类型

a->a

a是类型变量,可以是任何类型

3 个答案:

答案 0 :(得分:2)

问题不明确。你能提供更多细节吗? 您可以通过引入示例来尝试解释这些类型变量和模板是什么;)

我有Google搜索,ML被证明是一种函数式编程语言。 如果您愿意知道如何在函数式编程阶段使用C ++的模板。你可能会喜欢这个:

template <int N>
struct Factorial
{
    enum { value = N * Factorial<N - 1>::value };
};

template <>
struct Factorial<0> 
{
    enum { value = 1 };
};

// Factorial<4>::value == 24
// Factorial<0>::value == 1
void foo()
{
    int x = Factorial<4>::value; // == 24
    int y = Factorial<0>::value; // == 1
}

随意看看: http://en.wikipedia.org/wiki/Template_metaprogramming

以上描述了C ++的Turing Complete编译时子语言:)

您不仅可以在编译时混合模板和函数式编程风格。 STL(算法,仿函数......)安静地大量使用函数式编程范例。 所以如果你喜欢函数式编程,你会在C ++中找到很多有趣的东西;)

答案 1 :(得分:2)

我认为你的意思是“ML的多态性和C ++模板之间有什么区别?” 它们几乎完全不同,尽管它们有一些肤浅的相似之处。

在ML中,

fun id x = x

一个多态函数,其类型为a->a(对于任何a)。
在C ++中,

template<typename a>
a id(a x) { return x; }

是用于生成类型a (*)(a)的函数的模板(对于具有复制构造函数的任何a)。

C ++中的模板提供了编译时多态性,需要为它所使用的每种类型实例化它。它是如何为给定类型生成(重载)单态函数的“秘诀”。

ML函数是多态的,适用于任何类型,甚至是那些尚未被考虑过的函数。

答案 2 :(得分:0)

C ++模板不是变量:它们不能在运行时更改。