gpt4 book ai didi

c++ - 使用 C++11 auto 作为 const 函数对象的返回类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:12 26 4
gpt4 key购买 nike

我有一个 const 函数对象,暂时它返回 void。但可以返回 int 或 double。我正在用 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));

这段代码可以完美地编译并在串行模式下工作。现在我尝试使用 intel TBB parallel_for_each() 并行化上述 for_each。这要求函数对象是常量。这意味着不应允许线程修改或更改函数对象的私有(private)变量。

   //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

所以我不得不将 operator()() 更改为以下内容:

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

// do something

} //operator

我的问题是:如何使用“auto operator()() ->void”并使运算符“const”使其有效?

最佳答案

My question is: how do i use "auto operator()() ->void" and also make the operator "const" so that it becomes valid ?

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

//do something with the edge.
}

请记住,带有 cv 限定符的声明符基本上具有以下形式:

( 参数声明子句 ) cv-qualifier-seq [ref-qualifier] [< em>异常规范] [trailing-return-type]

(省略属性)

关于c++ - 使用 C++11 auto 作为 const 函数对象的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24004470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com