gpt4 book ai didi

c++ - 如何避免模板函数返回类型重复?

转载 作者:行者123 更新时间:2023-12-01 14:22:51 25 4
gpt4 key购买 nike

有没有办法避免重复并提高模板函数返回类型的可读性?

举个例子

template <typename FunctionType>
std::enable_if_t<
!std::is_void_v<std::invoke_result_t<FunctionType, MyClass*>>,
std::optional<std::invoke_result_t<FunctionType, MyClass*>>
> CallIfValid(MyClass* instance, FunctionType func)
{
using InvocationType = std::invoke_result_t<FunctionType, MyClass*>;
if (instance != nullptr)
{
return func(instance);
}
else
{
return std::optional<InvocationType>();
}
}

注意如何 std::invoke_result_t<FunctionType, MyClass*>最终在返回类型中重复两次,在方法主体中也是第三次。

我在这里没有看到任何建议或技巧?

谢谢

最佳答案

我也遇到了同样的问题。在我个人看来,没有一个好的真正的解决方案,不适用于一般情况。但是您可以采用一些缓解措施/解决方法。在您的示例中,您可以添加默认模板参数。此外,由于您指定了返回类型,因此无需在返回表达式中重复类型:

template <typename FunctionType, class InvocationType  = std::invoke_result_t<FunctionType, MyClass*>>
std::enable_if_t<
!std::is_void_v<InvocationType >,
std::optional<InvocationType >
> CallIfValid(MyClass* instance, FunctionType func)
{
if (instance != nullptr)
{
return func(instance);
}
else
{
return std::nullopt; // if you want to be explicit (I personally prefer this)
// return {}; // if you want to be terse
}
}

关于c++ - 如何避免模板函数返回类型重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61846955/

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