gpt4 book ai didi

C++11 "auto"到非 C++11 编译器

转载 作者:太空宇宙 更新时间:2023-11-03 10:31:15 24 4
gpt4 key购买 nike

我已经从

下载了源

http://matt.eifelle.com/2012/07/17/just-a-small-example-of-numerical-optimization-in-c/

并尝试在 g++ 4.4.6 中编译,它不知道以下源的自动:

  auto optimizer = Optimization::Local::build_simplex( 
fun,
Optimization::Local::make_and_criteria(Optimization::Local::IterationCriterion(max_iterations),
Optimization::Local::RelativeValueCriterion<float>(ftol)));

看了网页,我知道是因为C++11支持auto,所以我尝试搜索我下载的源代码,有一个simplex.h,它的源代码如下:

template<class Function, class Criterion>
static Simplex<typename Function::DataType, typename Function::ParameterType, Function, Criterion> build_simplex(const Function& fun, const Criterion& criterion)
{
return Simplex<typename Function::DataType, typename Function::ParameterType, Function, Criterion>(criterion);
}

然后我改变

auto optimizer  

Simplex<typename Function::DataType, typename Function::ParameterType, Function, Criterion> optimizer

或到

Optimization::Simplex<typename Function::DataType, typename Function::ParameterType, Function, Criterion> optimizer

没有一个会通过编译器!!

我不太了解c++的模板用法,除了得到一个c++11编译,我应该为这个 auto 做什么返回的数据类型修改?

更新:

感谢您的帮助,我修改为int optimizer并编译,我得到: test_rosenbrock_simplex.cpp:44: error: cannot convert Optimization::Local::Simplex<float, Eigen::Matrix<float, 2, 1, 0, 2, 1>, Rosenbrock, Optimization::Local::AndCriteria<Optimization::Local::IterationCriterion, Optimization::Local::RelativeValueCriterion<float> > >int在初始化中

然后我将代码更改为:

Optimization::Local::Simplex<float, Eigen::Matrix<float, 2, 1, 0, 2, 1>, Rosenbrock, Optimization::Local::AndCriteria<Optimization::Local::IterationCriterion, Optimization::Local::RelativeValueCriterion<float> > > optimizer

有效!!!!!!

g++ -O2 -march=native -msse2 -m64 -DEIGEN_NO_DEBUG test_rosenbrock_simplex.cpp-I/home/usrA/tools/eigen-eigen-5097c01bcdc4 -o test_rosenbrock_simplex.exe

./test_rosenbrock_simplex.exe

-2.75  -0.5     0
2.1875 1.125 0
Starting point: 10
10
Starting value: 8181
Best point: 1
1
Best value: 5.68434e-14

最佳答案

您必须替换实际的模板参数,只是声明的返回类型不会削减它。

正如 Drew 在评论中提到的,您可以说服编译器告诉您这一点。

简单写

int optimizer = .....;

并检查产生的错误。

关于C++11 "auto"到非 C++11 编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16006864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com