LINUX.ORG.RU

Шаблонное программирование в C++ и хвостовая рекурсия


0

3

Есть ли смысл при программировании на шаблонах применять хвостовую рекурсию?

Например, что лучше:

template <int n>
struct Fac
{
    enum { result = n * Fac<n - 1>::result };
};

template <>
struct Fac<0>
{
    enum { result = 1 };
};

или

template <int n>
class TailFac
{
    template <int counter, int mul>
    struct TailFacIter
    {  
        enum { value = TailFacIter<counter - 1, mul * counter>::value };
    };

    template <int mul>
    struct TailFacIter<0, mul>
    {  
        enum { value = mul };
    };

public:
    enum { result = TailFacIter<n - 1, n>::value };
};

Даст ли второй подход меньшее потребление памяти и большую скорость компиляции?

Ответ на: комментарий от anonymous

>может предложить в этой области.

Например, Common Lisp может? То есть при проектировании программы на Common Lisp вообще не нужно иметь представления о паттернах? Я просто думал что проектирование - этап перед кодированием, и на нем программа описывается более абстрактно, мб. даже независимо от языка. Или я ошибаюсь?

zombiegrinder_6000
() автор топика
Ответ на: комментарий от zombiegrinder_6000

> Или я ошибаюсь?

«Паттерны проектирования», так сильно популярные в OOP язычках вроде Java/C++ идут лесом, если ты пишешь на нормальных языках, где подобные костыли _неприменимы_.

Использовать идиоматические решения для обхода встроенных в язык и его библиотеку костылей имеет смысл только для конкретного языка. Тащить любимые паттерны из ООП в, например, пролог - это будет адский ад!

ky-san
()
Ответ на: комментарий от zombiegrinder_6000

> Я просто думал что проектирование - этап перед кодированием, и на нем программа описывается более абстрактно, мб. даже независимо от языка. Или я ошибаюсь?

Архитектура может быть независимой от языка, а проектирование всегда рано или поздно полагается на возможности имеющегося в распоряжении языка программирования.

anonymous
()
Ответ на: комментарий от anonymous

Архитектура может быть независимой от языка, а проектирование всегда рано или поздно полагается на возможности имеющегося в распоряжении языка программирования.

уточните о каком проектировании Вы сейчас говорите

shty ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.