我已从下载源

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编译之外,
我应该为此汽车做什么返回的数据类型修改?

更新:

感谢您的帮助,我将其修改为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++ - 将C++ 11 “auto”转换为非C++ 11编译器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16006864/

10-11 15:37