C++ 11"自动"到非C++ 11编译器

bar*_*hen 1 c++ g++ c++11

我从中下载了源代码

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

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

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

阅读网页,我知道这是因为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);
}
Run Code Online (Sandbox Code Playgroud)

然后我改变了

auto optimizer  
Run Code Online (Sandbox Code Playgroud)

Simplex<typename Function::DataType, typename Function::ParameterType, Function, Criterion> optimizer
Run Code Online (Sandbox Code Playgroud)

或者

Optimization::Simplex<typename Function::DataType, typename Function::ParameterType, Function, Criterion> optimizer
Run Code Online (Sandbox Code Playgroud)

没有人会通过编译器!!

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

更新:

感谢好心帮我修改要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
Run Code Online (Sandbox Code Playgroud)

Ben*_*igt 7

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

正如Drew在评论中提到的那样,你可以说服编译器告诉你这一点.

简单写一下

int optimizer = .....;
Run Code Online (Sandbox Code Playgroud)

并检查产生的错误.