我正在将一个C++应用程序移植到C#,遇到了模板。我已经阅读了一些相关内容,了解到有些模板类似于.Net泛型。我阅读了这个SO答案,它很好地总结了这个问题。
然而,某些c++模板的用法似乎与泛型无直接关系。在维基百科模板元编程文章中的下面例子中,模板似乎接受一个值,而不是一个类型。我不太确定如何将其移植到C#?
然而,某些c++模板的用法似乎与泛型无直接关系。在维基百科模板元编程文章中的下面例子中,模板似乎接受一个值,而不是一个类型。我不太确定如何将其移植到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
}
显然,对于这个例子,我可以这样做:
public int Factorial(int N){
if(N == 0) return 1;
return Factorial(N - 1);
}
但在我看来,这似乎是将代码重构为一个函数,而不是移植到语义相似的代码。