Вычислить float во время компиляции с использованием шаблонов

Я новичок во всем этом метапрограммировании шаблонов в беспорядке на С++, и я просто не могу понять это правильно.

Сценарий: например, у меня есть дроби 2/5, 6/9,... Я хочу вычислить результат этих дробей во время компиляции и отсортировать их позже, используя это значение во время выполнения.

Это вообще возможно? Макросы может?

Редактировать: Спасибо, Навин, но это не отвечает на вопрос, можно ли вычислять числа с плавающей запятой во время компиляции с использованием шаблонов. Например, с помощью рекурсии.

Не могу найти информацию в сети :/


person broken    schedule 02.06.2009    source источник


Ответы (3)


Не уверен, что вы спрашиваете. Вы имеете в виду что-то вроде этого:

#include <iostream>
using namespace std;;

template <int a, int b> struct Fract {
    double value() const {
        const double f = a / double(b);
        return f;
    }
};

int main() {
    Fract <2,5> f;
    cout << f.value() << endl;
}

Правка: если вы серьезно хотите заняться программированием шаблонов, метаданными или чем-то другим, настоятельно рекомендую приобрести книгу Шаблоны C++: полное руководство, что превосходно.

person Community    schedule 02.06.2009
comment
Метапрограммирование шаблонов? Это мое предположение. - person Doug T.; 02.06.2009
comment
Точно, может быть, я должен был написать это :) - person broken; 02.06.2009
comment
сломан, вам не нужно этого делать. Вы можете просто написать 2.0/5, и компилятор тоже рассчитает это во время компиляции. - person rlbond; 02.06.2009
comment
@broken - я бы не стал его тестировать - я не думаю, что это можно классифицировать как метапрограммирование! - person ; 02.06.2009
comment
кроме как для чистого удовольствия или для учебных целей, есть ли какая-то реальная польза от этого? - person Naveen; 02.06.2009
comment
Я прочитал вопрос как чрезмерно упрощенную версию фактического вопроса, поэтому ответ также обязательно чрезмерно упрощен. Очевидно, это было полезно для ОП. - person Mark Ransom; 02.06.2009

Вам не нужны шаблоны для этого. Любой приличный компилятор оптимизирует вычисления, если вы сделаете что-то вроде этого: float f = 2.0/5; Кстати, если все это переменные времени компиляции, почему вы хотите сортировать их во время выполнения?

person Naveen    schedule 02.06.2009