【发布时间】:2015-08-28 05:35:20
【问题描述】:
我有一个函数指针向量 (void (*)()),表示您已经采取的操作列表。怎样才能把最后两个弹出来,变成一个函数指针,然后放回列表中呢?
例子:
void link_last_two(std::vector<void (*)()> actions) {
if(actions.size() <= 1) return;
void (*first)() = actions.back();
actions.pop_back();
void (*second)() = actions.back();
actions.push_back([](){first(); second();});
}
【问题讨论】:
-
使用
std::function代替原始函数指针。 -
您可以使用 hackish 解决方案来做到这一点。如果您可以控制代码,请改用
std::function,正如@BasileStarynkevitch 所建议的那样。 -
函数指针只是一个指针——一个函数机器码所在的内存地址。 “first”指向某个地址,“second”指向某个地址;您希望新函数指向哪个地址?没有要指向的现有函数,而且您可能不会询问为新函数生成机器代码并指向它。这就是为什么你应该使用其他东西来描述函数而不是指针。 std::function 是一个不错的选择。
-
@BasileStarynkevitch 这不是非常慢吗?我可以更改源(我还没有编码)
-
@Czipperz, stackoverflow.com/questions/14306497/…
标签: c++ c++11 function-pointers