我想写一个调用函数的 Package 器类,
- 如果函数成功退出,则将结果存储在 Package 器的
data
字段中 - 否则,将异常转换为
int
错误代码。
这是我得到的:
struct ResponseBase
{
int code = 0;
};
template<typename T>
struct Response : ResponseBase
{
T data;
};
template<>
struct Response<void> : ResponseBase {
};
template<typename F>
auto try_catch_wrapper(F&& f)
{
Response<decltype(f())> res;
try
{
res.data = f(); // here's the problem
}
catch (const std::exception&)
{
res.code = -1;
}
return res;
}
int main() {
auto a = try_catch_wrapper([]() {
return 1;
});
if (a.code == 0)
{
std::cout << "Invoke Success, Result: " << a.data << std::endl;
}
else
{
std::cout << "Error occured! Code: " << a.code << std::endl;
}
// won't work for void return type
//auto b = try_catch_wrapper([]() {
// return;
// });
}
字符串
2条答案
按热度按时间eqfvzcg81#
我只想调用f()
您可以使用constexpr,如果如下所示:
字符串
Demo
tzxcd3kk2#
一个C++14版本将有2个SFINAE重载:
字符串
Demo