gpt4 book ai didi

c++ - C++ 中的函数对象集

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

所以基本上我想创建一组函数对象。在 python 中,如果我们这样做:

def func():
print "a"

a = func
b = func
fset = set()
fset.insert(a)
fset.insert(b)

在这种情况下,fset 将只有一个函数,因为 a 和 b 在 python 中是相同的。但是在 C++ 中,如果我为同一个函数创建函数对象,a 和 b 将是一个集合中的两个不同对象。有什么方法可以使具有相同功能的两个对象相同?

在 C++ 中:

void func(){
cout << "a";
}

function<void()> a = bind(func);
function<void()> b = bind(func);

现在我想如果 a 或其指针已经存在于集合中,则不应添加 b。

最佳答案

如果您只有 void 函数(或所有函数都具有相同的签名),请使用简单的 C 类型函数指针作为 std::sets 的模板类型。

这将起作用,并且没有 std::function 的类型删除开销。

void func() {}
void func2() {}

using fPtrType = void(*)(); // convenience type

int main()
{
std::set<fPtrType> fset;
fPtrType a = func;
fPtrType b = func;
fset.emplace(a);
fset.emplace(b);
fset.emplace(func2);

std::cout << fset.size(); // prints 2
return 0;
}

关于c++ - C++ 中的函数对象集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53440997/

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