Расчет поплавка во время компиляции с использованием шаблонов - PullRequest
1 голос
/ 02 июня 2009

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

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

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

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

Я не могу найти информацию на веб-сайтах: /

Ответы [ 3 ]

5 голосов
/ 02 июня 2009

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

2 голосов
/ 02 июня 2009

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

#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 ++: Полное руководство , что превосходно.

1 голос
/ 02 июня 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...