我正在尝试使用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(这是不可能的,因为它是一个函数参数)。有办法使它起作用吗?
答案 0 :(得分:-1)
有没有办法使它起作用?
不是这样。
看看你的λ
[](const int a) -> double (*)(double)
{
return f<a>;
}
您正在使用参数a
(在lambda中可能是已知的运行时)作为模板参数,必须是已知的编译类型。
不能工作。