gpt4 book ai didi

c++ - 如何保存静态可选值

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:45:39 25 4
gpt4 key购买 nike

考虑一个函数,它包装了一些其他函数,但在包装调用之后做了一些事情。

template< typename ftor, typename ... args >
typename std::result_of< ftor( args ... ) >::type
call_and_report( ftor && f, args && ... a ) {
auto && ret{ f( std::forward< args >( a ) ... ) };
std::cout << "Done!\n";
return std::forward< typename std::result_of< ftor( args ... ) >::type >
( ret );
}

如何扩展它以包装返回 void 的函数?添加另一个专业很容易,但我正在寻找另一种可能惯用的方法。

一般的想法是可能有也可能没有值。这就像编译时可选

最佳答案

随着你的函数的执行返回是合法的:

template <typename F, typename ... Args>
auto call_and_report(F && f, Args && ... a)
-> decltype(f(std::forward<Args>(a)...))
{
return f(std::forward<Args>(a)...);
}

现在要在调用后做一些事情,您可以在对象的析构函数中进行:

template <typename F, typename ... Args>
auto call_and_report(F && f, Args && ... a)
-> decltype(f(std::forward<Args>(a)...))
{
struct execute { ~execute() { std::cout << "Done!" << '\n'; } } execute;
return f(std::forward<Args>(a)...);
}

关于c++ - 如何保存静态可选值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18823353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com