【发布时间】:2013-10-15 02:29:42
【问题描述】:
为什么我在以下代码中遇到错误?我该如何解决?
#include <functional>
#include <iostream>
int foo()
{
std::cout << "::foo() \n";
return 0;
}
void bar()
{
std::cout << "::bar() \n";
}
template <typename T>
T Hook(const std::function<T()>& action, T def = T())
{
try
{
return action();
}
catch (const std::exception& ex)
{
}
catch (...)
{
}
return def;
};
int main()
{
std::function<int()> foo_func(foo);
Hook(foo_func);
std::function<void()> bar_func(bar);
// Hook(bar_func); // Error
}
【问题讨论】:
-
你试图返回一个 void 值?
-
@Shaggi 是的,我能做到 - ideone.com/0835o2
-
你遇到了什么错误?
-
catch不重新抛出不是好兆头 -
@KarolyHorvath 这显然是一个简化的例子,我们不知道这些捕获的作用(但在这种情况下,他本来可以完全放弃异常的东西,但是很好)。