Перенос C ++ на C # - шаблоны

Я портирую приложение C ++ на C # и столкнулся с шаблонами. Я немного прочитал об этом и понимаю, что некоторые шаблоны сродни дженерикам .Net. Я прочитал SO-ответ на этот случай, в котором он красиво резюмирован.

Однако некоторые виды использования шаблонов C ++, похоже, не имеют прямого отношения к дженерикам. В приведенном ниже примере из статьи Википедии Метапрограммирование шаблонов шаблон, похоже, принимает значение, а не тип. Я не совсем уверен, как это будет перенесено на C #?

template 
struct Factorial 
{
    enum { value = N * Factorial::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);
}

но мне кажется, что это рефакторинг функции, а не перенос на семантически похожий код.

5
задан Community 23 May 2017 в 12:25
поделиться