如何解决提升三次 Hermite 插值“需要模板参数列表”
我正在尝试使用 boost 库中的三次 hermite 插值来插入非等距数据。但是,实现 documentation 中的示例会产生错误“C2955:'boost::math::interpolators::cubic_hermite':使用类模板需要模板参数列表”。
这是我的代码:
CMakeLists.txt
cmake_minimum_required(VERSION 3.18)
project(CubichermiteTest LANGUAGES CXX)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
#set(Boost_DEBUG ON)
set(BOOST_ROOT "C:/local/boost_1_76_0/boost" )
set(BOOST_INCLUDEDIR "C:/local/boost_1_76_0" )
set(BOOST_LIBRARYDIR "C:/local/boost_1_76_0/lib64-msvc-14.2" )
find_package(Boost 1.76.0 required)
add_executable(CubichermiteTest
main.cpp
)
target_link_libraries(CubichermiteTest Boost::boost)
main.cpp
#include <iostream>
#include <vector>
#include <boost/math/interpolators/cubic_hermite.hpp>
int main()
{
std::vector<double> x{1,5,9,12};
std::vector<double> y{8,17,4,-3};
std::vector<double> dydx{5,-2,-1,2};
using boost::math::interpolators::cubic_hermite;
auto spline = cubic_hermite(std::move(x),std::move(y),std::move(dydx));
// evaluate at a point:
double z = spline(3.4);
// evaluate derivative at a point:
double zprime = spline.prime(3.4);
std::cout << zprime << '\n';
}
调用cubic_hermite时产生的错误。错误的原因可能是什么?
解决方法
代码示例建议您要使用类模板参数推导(对于 RandomAccessContainer
的 cubic_hermite
模板参数)。要么确保您的编译器使用 C++17 标准(因为没有早期标准支持此功能)或明确指定模板参数,例如
auto spline = cubic_hermite<decltype(x)>(std::move(x),std::move(y),std::move(dydx));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。