我有std::function
指向类成员函数,例如&Foo:bar
。 std::function
对象是否记录了对象上下文,例如Foo*
?有没有办法从std::function
对象/类中获取上下文?
目的是找出我的unordered_multimap
函数是否已包含来自上下文的函数(但不一定是同一个类成员函数)。
实施例
std::unordered_multimap<int, std::function<int(int)>> callbacks;
Foo* myFoo = new Foo();
callbacks[1].emplace( std::bind(&Foo::bar, myFoo, std::placeholders::_1) );
callbacks[1].emplace( std::bind(&Foo::bar2, myFoo, std::placeholders::_1) ); // now callbacks contains 2 functions for the same object/context. I want to avoid this
// Check context exists before inserting
auto vCallbacks = callbacks.equal_range(1);
for (auto iter = vCallbacks.first; iter != vCallbacks.second; iter++) {
std::function<int(int)> func = iter->second;
// somehow check function object for context myFoo
if (func.??? == myFoo)
// Sorry cant add callback because this object already has registered one
}
答案 0 :(得分:1)
不,它没有。您基本上无法以任何有用的方式检查std::function
的内容。