Как сделать меньше чем сравнение в шаблонном метапрограммировании? - PullRequest
8 голосов
/ 22 июля 2010

Мне задали этот вопрос в понедельник, и я не знаю, как на это ответить.Поскольку я не знаю, я сейчас очень хочу это выяснить.Любопытство убивает эту кошку.Учитывая два целых числа, вернуть меньшее во время компиляции.

template<int M, int N>
struct SmallerOfMandN{
    //and magic happenes here
};

Есть указатели или как это сделать?(Начнёт читать Повышение MPL сегодня вечером.)

1 Ответ

17 голосов
/ 22 июля 2010

Это называется минимум двумя числами, и вам не нужна всемирная библиотека тяжеловесов, такая как mpl, чтобы сделать такую ​​вещь:

template <int M, int N>
struct compile_time_min
{
    static const int smaller =  M < N ? M : N;
};

int main()
{
    const int smaller = compile_time_min<10, 5>::smaller;
}

Конечно, если бы это был C ++ 0x, вы могли бы легко сказать:

constexpr int compile_time_min(int M, int N)
{
    return M < N ? M : N;
}

int main()
{
    constexpr int smaller = compile_time_min(10, 5);
}
...