Блок задач

9. Шаблоны C++

Темы
Сложность 2

Задача «Сэмплирование функции на шаблонах C++»

Реализовать задачу Сэмплирование функции, используя метапрограммирование и шаблоны C++.

Пример

class QuadraticFn
{
    const double m_a, m_b, m_c;
public:
    QuadraticFn(double a, double b, double c) 
        : m_a(a), m_b(b), m_c(c) {}

    double operator () (double x) const {
        return (m_a * x + m_b) * x + m_c;
    }
};

// ...

Sampler s; // класс сэмплирующий функцию

// инициализация через лямбда-функцию
s.init([](double x) -> double { return (-1 * x + 2) * x - 5; }, 0, 10, 0.025);

// инициализация через функтор
QuadraticFn f(5, -3, 0);
s.init(f, 0, 10, 0.025);

// распечатка сэмплов
for (size_t i = 0; i < s.size(); ++i)
    cout << s[i].first << "\t" << s[i].second << endl;
}