Я пытаюсь иметь указатель функции, где в некоторых случаях ему либо назначается функция, принимающая 2 аргумента (cv::Mat и структура, содержащая параметры), либо другая функция, которая принимает 3 аргумента (те же 2 аргументы и список координат). Я полагаю, что std::function и std::bind - это то, что я должен использовать здесь.
Mat process_F1(cv::Mat img, feature_params f);
Mat process_F1_coords(cv::Mat img, feature_params f, std::vector<std::pair<int, int> > feature_coords c);
Mat process_F2(cv::Mat img, feature_params f);
Mat process_F2_coords(cv::Mat img, feature_params f, std::vector<std::pair<int, int> > feature_coords );
// this is the function pointer that will hold them
std::function<cv::Mat()> feature_func_f;
//this is how I assign them:
void set_feature_func(int feature_method, bool use_coords)
{
switch (feature_method){
case 0:
if( !use_coords )
feature_func_f = std::bind(process_F1,std::placeholders::_2);
else
feature_func_f = std::bind(process_F1_coords,std::placeholders::_3);
break;
case 1:
if( !use_coords )
feature_func_f = std::bind(process_F2,std::placeholders::_2);
else
feature_func_f = std::bind(process_F2_coords,std::placeholders::_3);
break;
}
Я намерен вызвать feature_func_f как:
cv::Mat m, n;
feature_params p;
set_feature_func(0,false);
n = feature_func_f(m,p);
// or if I have a coordinate list c
std::vector<std::pair<int, int> > c;
set_feature_func(0,true);
n = feature_func_f(m,p,c);
Что я здесь делаю неправильно? Я получаю кучу ошибок, которые не имеют особого смысла в заголовке для функционала:
Error 4 error C2977: 'std::add_reference' : too many template arguments C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\functional 900 1
Error 5 error C2955: 'std::add_reference' : use of class template requires template argument list C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\functional 900 1
Error 6 error C2198: 'cv::Mat (__cdecl *)(cv::Mat,feature_params)' : too few arguments for call C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\functional 1149 1
Error 2 error C2146: syntax error : missing ',' before identifier 'type' C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\functional 900 1
Error 3 error C2065: 'type' : undeclared identifier C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\functional 900 1
Error 1 error C2027: use of undefined type 'std::tuple_element<0x01,_Ftuple>' C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\functional 900 1
Matcher::
, и пусть он скомпилирует и сгенерирует ошибку сам по себе. Пожалуйста, публикуйте каждую ошибку или хотя бы первый набор ошибок (ошибки, которые начинаются сверху и заканчиваются той частью, где упоминается ваш код) -- a случайный выбор ошибок не так уж и полезен. Подождите секунду, как вы думаете,_2
и_3
- это количество заполнителей? Вы когда-нибудь успешно использовалиstd::placeholders
? Как вы собираетесь вызватьfeature_func_f
? - person Yakk - Adam Nevraumont   schedule 13.07.2015