gpt4 book ai didi

c++ - 关于将谓词作为模板参数传递

转载 作者:行者123 更新时间:2023-11-28 00:21:10 24 4
gpt4 key购买 nike

我编写了一个通用函数模板,如下所示,但无法构建。

它仅在谓词通过const referenceby value 传递时构建。

你知道 C++ 在这种情况下遵循的原则是什么吗?

我正在使用 g++,但我的版本没有可用的 C++11。

我已经检查了 boost::bind 返回的内容,它说 unspecified type(我希望我没看错)。

 struct MyRecord{
int a_;
int b_;
};

template<class Predicate>
bool isAny(Predicate &pred) {
vector<MyRecord>::iterator it = std::find_if(
records.begin(),
records.end(),
pred);
if(it!=records.end()) {
// .. do something
}
return it != records.end();
}

isAny(boost::bind(&MyRecord::a_,_1)==1);
isAny(boost::bind(&MyRecord::b_,_1)==2);

// It works with the 2 declarations below
template<class Predicate>
bool isAny(const Predicate &pred);

// or

template<class Predicate>
bool isAny(Predicate pred);

最佳答案

您的调用 isAny(boost::bind(&MyRecord::a_,_1)==1); 创建了一个临时对象。在 C++ 中,临时对象只能绑定(bind)到 const 引用参数或值参数。这个想法是,如果一个函数通过非常量引用接受参数,则意味着修改参数,而修改临时参数将毫无意义。

FWIW STL 按值获取谓词。

关于c++ - 关于将谓词作为模板参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27403808/

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