gpt4 book ai didi

c++ - 如何使用概念将参数传递给类方法?

转载 作者:行者123 更新时间:2023-12-05 00:42:33 24 4
gpt4 key购买 nike

我有一个从 std::optional 类继承的 optional_monadic 类

    template <class T>
class monadic_optional : public std::optional<T>
{
public:
using std::optional<T>::optional;
monadic_optional(T value) : std::optional<T>(value) {}
}

在这个类中我描述了方法

    template <class Return>
nonstd::monadic_optional<Return> and_then(std::function<nonstd::monadic_optional<Return>(T)> func)
{
if (this->has_value())
return func(this->value());
else
return std::nullopt;
}

我想使用概念将模板传递给检查它是否是函数的方法。如何使用概念来实现这一点?

    template <class T>
concept convertible_to_func = std::convertible_to <T, std::function<nonstd::monadic_optional<Return>(T)>>
requires
{
};
nonstd::monadic_optional<T> and_then(T func)
{
if (this->has_value())
return func(this->value());
else
return std::nullopt;
}

它应该看起来像这样,但它不能编译。

最佳答案

这对于 invokable 来说非常简单。而且您不必要求它成为 std::function:

auto and_then(std::invocable<T> auto func) ->
monadic_optional<std::invoke_result_t<decltype(func), T>>
{
if(this->has_value())
return std::invoke(func, *this);
return std::nullopt;
}

关于c++ - 如何使用概念将参数传递给类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72929159/

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