由于std::function可以保存成员函数,所以它必须在某处存储一个指向对象示例的指针。如何从包含成员函数的std::function中获取this指针?
std::function
this
dgsult0t1#
std::function类型的对象保存了一个可调用对象。指向成员函数的指针是一种可调用对象;它可以用一个适当类类型的参数加上它所需要的任何附加参数来调用。例如:
struct S { void f(int); }; std::function<void(S, int)> g(&S::f);
若要呼叫它,请传递S型别的对象:
S
S s; g(s, 3);
注意,std::function对象不持有S对象;只有当调用它时函数指针才绑定到对象。
fnx2tebb2#
您可以将std::function模板 Package 在一个功能类似的模板中,但是该模板公开了您想要的函数(如按地址排序或其他)有关示例实现,请参见Stroika Function Template。它的工作方式与std::function类似(并允许您检索聚合的std::function),但它还保留了额外的信息,以便进行排序等操作(便于在Map中存储函数指针,并具有对象标识,以便稍后删除它们)。
2条答案
按热度按时间dgsult0t1#
std::function
类型的对象保存了一个可调用对象。指向成员函数的指针是一种可调用对象;它可以用一个适当类类型的参数加上它所需要的任何附加参数来调用。例如:若要呼叫它,请传递
S
型别的对象:注意,
std::function
对象不持有S
对象;只有当调用它时函数指针才绑定到对象。fnx2tebb2#
您可以将std::function模板 Package 在一个功能类似的模板中,但是该模板公开了您想要的函数(如按地址排序或其他)
有关示例实现,请参见Stroika Function Template。
它的工作方式与std::function类似(并允许您检索聚合的std::function),但它还保留了额外的信息,以便进行排序等操作(便于在Map中存储函数指针,并具有对象标识,以便稍后删除它们)。