gpt4 book ai didi

c++ - 在 operator()() 中对具有状态和两个参数的函数对象使用 boost bind

转载 作者:行者123 更新时间:2023-11-28 02:47:22 24 4
gpt4 key购买 nike

我在执行以下操作时遇到了一些麻烦:在 boost 图中使用 boost::bind/std::bind。

//function object 
template <typename graph_t>
struct my_functor {
public:
my_functor() { }
my_functor(graph_t& _G) : G(_G) { }

template <typename edge_t>
bool operator() (const edge_t& edge1, const edge_1& edge2) {
//do something with edge properties.
// return true or false as per condition
}
private:
graph_t& G;
};

//boost graph
Graph_t G; // add some edges /properties etc.

//store the edges in some container
edge_container_t edge_set; //edge_container_t is say a std::vector<edge_descriptor>

//now the code
my_functor<graph_t> func(G); //initialize a function

//I want to bind by function object here so that it accepts two edges in the operator()() of function
//object.

auto bind_func = std::bind(func, _1, _2); //_1, _2 should take edge1 and edge2 as arguments


for (const auto& edge1 : edge_set) {
for (const auto& edge2 : edge_set {
if (edge1 != edge2)
bool y = bind_func(edge1, edge2) // bind_func returns a bool
}
}

我在创建 bind_func 时在这里做错了,但我对文档有点困惑。如果我想使用 boost::bind 我该怎么做?

在这种情况下请帮忙。我在反复试验中遇到的一些错误:1. 占位符 _1 , _2 未在范围内声明(我确实包含了它仍然出现2. 如果我使用 boost::bind 代替 std::bind,它会给出一些解包错误。

最佳答案

占位符位于命名空间 std::placeholders 中:

auto bind_func = std::bind(f, std::placeholders::_1, 
std::placeholders::_2); //_1, _2 should take edge1 and edge2 as arguments

应该可以正常编译。我真的不明白为什么你将 f 绑定(bind)到任何东西,使用 bind_funcf 相比没有优势。

关于c++ - 在 operator()() 中对具有状态和两个参数的函数对象使用 boost bind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23971699/

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