类型之间的差异是什么 变量和C ++的模板?提前谢谢
当函数
时,你可以在ML中看到类型变量fun foo x = x
有类型
a->a
a是类型变量,可以是任何类型
答案 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 ++模板不是变量:它们不能在运行时更改。