Использование C ++ 11 AUTO в качестве типа возврата для объекта функции Const

StackOverflow https://stackoverflow.com//questions/24004470

  •  20-12-2019
  •  | 
  •  

Вопрос

У меня есть объект функции const и для портации, он возвращает void.Но можете вернуть int или двойной.Я пишу код в стиле C ++ 11 и просто пытался использовать Auto в качестве типа возврата.Хотя код компилирует, я не уверен, что это на 100% правильно или нет.Вот код.

template <typename graph_t>
 struct my_func { 
   public:
    my_func() {  } 
    my_func (graph_t&  _G) : G(_G) {  } 

   template <typename edge_t>
   auto operator()(edge_t   edge) -> void const {

     //do something with the edge.
   } //operator

   private:
    graph_t& G;
   };

   //call the functor: (pass graph G as template parameter)
   std::for_each(beginEdge, endEdge, my_func<Graph>(G));
.

Этот код компилируется и работает в последовательном режиме идеально.Теперь я пытаюсь распараллелизировать вышеупомянутое or for_each, используя Intel TBB Parallel_For_each ().Это требует, чтобы объект функции быть постоянным.Это означает, что нитки не должны быть разрешены для изменения или изменения частных переменных функциональных объектов.

   //tbb::parallel_for_each
   tbb::paralle_for_each(beginEdge, endEdge, my_func<Graph>(G));

   Now, the compiler error comes: 
   passing const my_func< ... > ..  discards qualifiers
.

Так что я должен был изменить оператор () () к следующему:

   template <typename edge_t>
   void operator()(edge_t  edge) const { 

   // do something

   } //operator
.

Мой вопрос: как использовать «Авто оператор () () -> void», а также сделать оператор «const», чтобы он был действительным?

Это было полезно?

Решение

Мой вопрос: как использовать «Авто оператор () () -> void», а также сделать оператор "const" так, чтобы оно становится действительным?

   template <typename edge_t>
   auto operator()(edge_t   edge) const -> void
   {

     //do something with the edge.
   }
.

Помните, что декларатор с CV-квалификатором имеет в основном следующую форму:

( Параметр-объявление-предложение-предложение ) cv-квалификатор-seq [ ref-квалификатор ] [< Спецификация исключения ] [ Training-Return-Type ]

(опущены атрибуты)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top