【发布时间】:2018-11-23 05:20:23
【问题描述】:
所以基本上我想创建一组 Function 对象。 如果我们这样做,在 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。
【问题讨论】:
-
a和b本质上是指向同一个对象的两个指针,而不是同一个类的两个实例。你可以有std::set<std::function<void()>*>,或者可能是一个智能指针——它的行为方式类似。 -
但在这种情况下也每次创建函数指针
a = function();函数 b = 函数(); a 和 b 仍然会有不同的指针,对吧? -
一组,根据定义,包含彼此不同的值。当您建议将“相同的功能”作为两个不同的对象放入一个集合时,不清楚您在这里谈论的是什么。也许你应该用一些 C++ 代码来支持你的问题来说明你的问题。
-
您说“创建指针”,但您的代码实际上并没有创建任何指针。也不清楚您所说的
function()是什么意思 - 这在语法上似乎无效并且可能无法编译。 -
@IgorTandetnik 他们在谈论 your 评论,其中存储了
std::function<void()>*
标签: c++