Я пытаюсь создать функтор так:
struct STFRandomTreeFunction
{
typedef double (*function_ptr)(const TrainingDataPoint& data, boost::unordered_map<std::string, cv::Mat>& preloaded_images);
};struct STFRandomTreeFunctor
{
private:
boost::unordered_map<std::string, cv::Mat> *image_cache;
STFRandomTreeFunction::function_ptr function;
std::string function_id;
public:
STFRandomTreeFunctor(boost::unordered_map<std::string, cv::Mat>& cache, STFRandomTreeFunction::function_ptr function_ptr, std::string function_id){
image_cache = &cache;
this->function = function;
this->function_id = function_id;
}
std::string get_function_id(){
return function_id;
}
double operator()(const TrainingDataPoint& data_point){
return function(data_point, *image_cache);
}
};
И я пытаюсь запустить следующий код:
double something(const TrainingDataPoint& a, unordered_map<string, Mat>& cache){
return 5;
}int main(int argc, char* argv[]) {
unordered_map<string, Mat> cache;
STFRandomTreeFunctor functor = STFRandomTreeFunctor(cache, something, "id");
TrainingDataPoint d = TrainingDataPoint(1,2,"", ImagePoint(1,2), ImagePoint(1,2), "");
double value = functor(d);
cout << "Value is " << value << endl;
}
Тем не менее, я не получаю вывод. Похоже, что выдает какое-то исключение, однако Eclipse не показывает мне его, а просто показывает, что программа завершилась.
Есть идеи?
В конструкторе STFRandomTreeFunctor
this->function = function;
Это самостоятельное назначение. Я полагаю, вы хотели это сделать:
this->function = function_ptr;
Других решений пока нет …