通过Lambda实现纯虚函数

6
我可以使用Lambda实现纯虚函数吗,就像Java接口实现一样吗?

1
也许你可以添加一些伪代码以便更容易理解你的意图? - Mikael H
要拥有一个纯虚函数,你需要一个抽象类。然后你需要派生类来实现这个函数。但是,你可以创建一个模板类/函数,以给定的 lambda 生成一个派生类。 - ALX23z
1个回答

6

不能直接实现,但可以通过一些间接方法实现。

struct interface {
    virtual auto execute() -> int = 0;
};

template<typename T>
struct lambda_impl : interface, private T {
    lambda_impl(T l) noexcept : T{l} {}

    auto execute() -> int override {
        return T::operator()();
    }
};

现在可以像这样构造一个lambda_impl
auto instance = lambda_impl{
    []{ return 42; }
};

instance.execute();

auto instance = new lambda_impl 应该改为 interface* instance = new lambda_impl 吗?目前(在隔离的代码中)struct interface 已经过时了。但是对于 Java 开发人员来说可能很清楚。 - Mikael H
1
请不要展示拥有原始指针,尤其是在回答Java开发人员时。这将导致内存泄漏。 - besc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接