Проблема с шаблонным ядром для эффективного Ransac

Я пытаюсь использовать эффективный алгоритм Ransac CGAL в функции, использующей шаблонное ядро, вот минимальный код для воспроизведения.

#include <CGAL/property_map.h>
#include <CGAL/Point_with_normal_3.h>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Shape_detection/Efficient_RANSAC.h>
// Type declarations.
typedef CGAL::Exact_predicates_inexact_constructions_kernel  Kernel;


template < typename K > //comment for working version
void funcTest() {

//typedef   CGAL::Exact_predicates_inexact_constructions_kernel  K;       //uncomment for working version
  typedef   std::tuple<typename K::Point_3,typename K::Vector_3, size_t, bool>     Point_and_normals;
  typedef   CGAL::Nth_of_tuple_property_map<0, Point_and_normals>  Point_map;
  typedef   CGAL::Nth_of_tuple_property_map<1, Point_and_normals>  Normal_map;
  typedef   CGAL::Shape_detection::Efficient_RANSAC_traits
                <K, std::vector<Point_and_normals>, Point_map, Normal_map>             TraitsShape;
  typedef  CGAL::Shape_detection::Efficient_RANSAC<TraitsShape> Efficient_ransac;
  typedef  CGAL::Shape_detection::Plane<TraitsShape> PlaneRansac;

  std::vector<Point_and_normals>  points;
  Efficient_ransac ransac;
  ransac.set_input(points);
  ransac.add_shape_factory<PlaneRansac>();
  ransac.detect();
}

int main (int argc, char** argv) {

  funcTest<Kernel>();   //comment for working version
  //funcTest());        //uncomment for working version
  return 0;
}

В этом коде шаблонная версия не строится, выдавая эту ошибку

tester.cpp:24:39: error: expected primary-expression before ‘>’ token
    24 |   ransac.add_shape_factory<PlaneRansac>();
       |                                       ^
tester.cpp:24:41: error: expected primary-expression before ‘)’ token
    24 |   ransac.add_shape_factory<PlaneRansac>();

Однако проблема не возникает с явным ядром, я предполагаю, что это может быть связано с проблемой имени типа, но я не уверен, что я могу делать неправильно в этом случае. Любые советы, рекомендации приветствуются

Я просто хотел сказать, хорошо заданный и отформатированный вопрос. Я надеюсь, что вы получите ответ в ближайшее время

Melon 17.05.2022 09:54
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
2
1
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

проблема заключается в том, что компилятор не знает, является ли токен <, который следует за add_shape_factory, оператором меньше или началом списка аргументов шаблона.

Мы можем использовать .template конструкция при вызове шаблон функции-члена для решения этой проблемы, как показано ниже:

ransac.template add_shape_factory<PlaneRansac>();
//-----^^^^^^^^------------------------------------->added template keyword here to indicate that it is a member function template

.template используется, чтобы сообщить компилятору, что токен < является началом списка аргументов шаблона, а не оператором «меньше».

Другие вопросы по теме

Похожие вопросы

Печать time_t в элементе векторной структуры
Как определяется, какой блок памяти использовать в c/c++?
Я скомпилировал свой код cpp для создания dll-файла в Visual Studio, но не могу найти сгенерированный dll-файл. Есть ли какое-либо имя по умолчанию для dll в vs.
Неправильные значения печати при повторении массива 2d char
Данные в аргументе int* функции не возвращаются вызывающей стороной
Ошибка: доступ члена к неполному типу''; примечание: предварительное объявление ''
Можно ли использовать `#ifdef` внутри макроса?
Ошибка: ожидался неполный идентификатор перед токеном «{» в Linux gcc
Используют ли предварительно скомпилированные заголовки предварительно скомпилированные заголовки, если они включены, или они предназначены только для файлов .cpp?
Введите каламбур в константном / статическом инициализаторе (построение константы с плавающей запятой из битов)