【发布时间】:2011-07-30 20:26:12
【问题描述】:
我看到 few questions 引用了 std::bad_function_call exception,但无法通过谷歌搜索找到导致此异常的原因。
什么样的行为应该导致这个异常?你能给我一些没有其他语义问题的最小例子吗?
【问题讨论】:
标签: c++ exception lambda c++11
我看到 few questions 引用了 std::bad_function_call exception,但无法通过谷歌搜索找到导致此异常的原因。
什么样的行为应该导致这个异常?你能给我一些没有其他语义问题的最小例子吗?
【问题讨论】:
标签: c++ exception lambda c++11
就我而言,问题出在捕获列表中。我有一个递归 lambda 函数。
//decl
std::function<void(const SBone*, const core::vector3df&, const core::quaternion&)> f_build;
f_build = [&f_build](const SBone* bone, const core::vector3df& pos, const core::quaternion& rot)
{
...
}
捕获列表中 f_build 中缺少 & 会生成错误调用。
【讨论】:
临时函数的调用也可以抛出:
struct F
{
const std::function<void()>& myF;
F(const std::function<void()>& f) : myF(f) {}
void call()
{
myF();
}
};
int main()
{
F f([]{ std::cout << "Hello World!" << std::endl;});
f.call();
return 0;
}
但这取决于编译器(vc++ 抛出,g++ 不是)。
【讨论】:
"在没有调用目标的情况下执行函数调用会引发类型异常 std::bad_function_call"
std::function<void(int,int)> f;
f(33,66); // throws std::bad_function_call
对我来说没有学分......它是 C++ 标准库的 Nicolai Josuttis Pundit
【讨论】:
当然,最简单的方法是尝试调用空的 std::function。
int main() {
std::function<int()> intfunc;
int x = intfunc(); // BAD
}
【讨论】:
bad_function_call呢?
std::function。抱歉,我目前无法测试 lambda 代码。我仔细检查了最新的 lambda 规范,但我找不到任何抛出 bad_function_call 的东西。我重新搜索了bad_function_call 的最新草案,注意捕捉bad_function_call 可能被连字的情况,但没有发现任何其他情况。仍然有可能我错过了一个。如果您找到它,请为我们发布指向它的指针。
for_each 中本地使用的某个迭代器)。