Я пытаюсь создать функцию-обертку, которая принимает функцию с 1 аргументом шаблона и использует ее в другом заголовочном файле.В основном, основная программа вычисляет определенные переменные, которые определяют my_function, которая используется для определения заголовка «crit.h» в CGAL.Вот «sizing_fun.h», который содержит функцию и обертку функции:
template <typename Point_vec>
double my_function(double x, double y, Point_vec list_of_points)
{
//use list_of_points
return 4.0+(x*x+y*y);
}
template <typename FT, typename Point_2, typename Point_vec>
class FT_to_point_function_wrapper : public std::binary_function<Point_2, Point_vec, FT>
{
typedef FT (*Implicit_function)(FT, FT, FT);
Implicit_function function;
public:
FT_to_point_function_wrapper(Implicit_function f) : function(f) {}
FT operator()(Point_2 p, Point_vec list) const { return function(p.x(), p.y(), std::forward<Point_vec>(list)); } //error line
};
В «crit.h» я использую my_func в качестве обертки функции, определенной выше.pcc - это аргумент Point_2, а my_list - это аргумент Point_vec.
double local_squared_size_bound = my_func(pcc,my_list);
Я получаю сообщения об ошибках:
sizing_fun.h:17: error: cannot convert 'std::vector<CGAL::Point_2<CGAL::Epick>, std::allocator<CGAL::Point_2<CGAL::Epick> > >' to 'double' in argument passing
Так что, похоже, тип Point_vec не передается правильно.
Я понял этот пост: Оболочка вызова функции C ++ с функцией в качестве аргумента шаблона Но я думаю, что она отличается, потому что ее функции не имеют аргумента шаблона.