我有很多的方法,這是從std::unary_function<K::Point_3, K::FT>
加typedef K::Point_3 Point;
導出(底層庫CGAL要求的話) - 這個班級被稱爲Function
。
我現在需要一些派生類(例如:MySphere
)的實例添加到Function_vector
:
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Implicit_to_labeling_function_wrapper.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef K::FT FT;
class Function: public std::unary_function<K::Point_3, K::FT>
{
public:
typedef K::Point_3 Point; // necessary
// I'd rather not define operator() here
virtual K::FT operator()(K::Point_3 p) const {return 0.0;}
};
class MySphere: public Function
{
public:
virtual K::FT operator()(K::Point_3 p) const {return 3.14;}
};
typedef CGAL::Implicit_multi_domain_to_labeling_function_wrapper<Function>
Function_wrapper;
typedef Function_wrapper::Function_vector Function_vector;
int main()
{
MySphere f1;
Function_vector v;
v.push_back(f1);
std::cout << f1(CGAL::ORIGIN) << std::endl; // MySphere::operator()
std::cout << v[0](CGAL::ORIGIN) << std::endl; // Function::operator() :(
return 0;
}
問題:
Function_vector
不接受指針,所以實際的抽象Function
類不能是虛擬的,需要從std::unary_function
執行operator()
。當將MySphere
實例添加到Function_vector
時,MySphere
變爲Function
而Function
的operator()
被調用,而不是MySphere
。
如何擁有v[0]
致電MySphere::operator()
?
謝謝,這是我的想法。我會回到CGAL開發者。 –