нет именованного типа в классе std::result

Во-первых: я прочитал связанные вопросы и решения, которые не исправили ошибку.

учитывая:

double foo(cv::InputArray Input1,
           cv::InputArray Input2,
           cv::InputOutputArray InOut,  
           cv::TermCriteria criteria=cv::TermCriteria(cv::TermCriteria::MAX_ITER+cv::TermCriteria::EPS, 50, 0.001)),
           cv::InputArray Input3 = cv::noArray())
{
      return 2;
}

Если я вызову функцию с помощью:

cv::Mat In1, In2, InOut; //dummy for test
double ret = foo(In1, In2, InOut);

он компилируется; но когда я пытаюсь его направить, я получаю эту ошибку:

нет типа с именем "тип" в классе std::result

double ret = 0;
std::thread th(ret, &foo, &In1, &In2, InOut);

Итак, я попытался использовать std::ref, но получил ту же ошибку:

double ret = 0;
std::thread th(ret, &foo, std::ref(In1), std::ref(In2), std::ref(InOut));

person A.albin    schedule 09.11.2017    source источник
comment
вы передаете double в качестве 1-го параметра std::thread::thread, я не думаю, что это сработает.   -  person apple apple    schedule 09.11.2017
comment
Возможный дубликат C++: простое возвращаемое значение из std::thread?   -  person apple apple    schedule 09.11.2017


Ответы (1)


Первый пункт:

Чтобы получить результат, вам нужно будет использовать другие инструменты (проверьте связанный ответ), или самым простым будет использование параметра double& as.

Второй момент:

Вам не нужен std::ref() для cv::Mat, но он понадобится, если для double& вам просто нужно определить значения по умолчанию в конструкторе std::thread.

это должно скомпилироваться (не тестировалось, но уверено в результате):

std::thread t(&foo, In1, In2, InOut, cv::TermCriteria(values), cv::noArray(), std::ref(retval));

с:

void foo(cv::InputArray Input1,
       cv::InputArray Input2,
       cv::InputOutputArray InOut,  
       cv::TermCriteria criteria=cv::TermCriteria(cv::TermCriteria::MAX_ITER+cv::TermCriteria::EPS, 50, 0.001)),
       cv::InputArray Input3 = cv::noArray(),
       double& retval)
  {
      retval = 2;
  }
person Ebya    schedule 09.11.2017