генерация функций во время компиляции - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь сгенерировать функции во время компиляции, используя boost hana. Вот код, который я написал

#include <boost/hana/transform.hpp>

#include <array>

template<int i>
double f(double x)
{
    return x * i; 
}

int main()
{
    constexpr std::array arr = {1,5,10,100,500};

    constexpr auto functions = hana::transform(arr, 
        [](const int a) -> double (*)(double)
        {
            return f<a>;
        }
    );

}

при компиляции я получаю ошибку, что f не конвертируется в тип double (*) (double).

Я думаю, что проблема в том, что a не является constexpr (что невозможно, поскольку это аргумент функции). Есть ли способ заставить это работать?

1 Ответ

0 голосов
/ 13 ноября 2018

Есть ли способ заставить это работать?

Не так.

Посмотри на свою лямбду

    [](const int a) -> double (*)(double)
    {
        return f<a>;
    }

В качестве параметра шаблона вы используете аргумент a, который потенциально известен во время выполнения в лямбда-выражении, что должен быть известным типом компиляции.

Не могу работать.

...