gpt4 book ai didi

c++ - 纯虚函数覆盖

转载 作者:太空狗 更新时间:2023-10-29 19:44:01 26 4
gpt4 key购买 nike

好吧,我有一个有点愚蠢的问题,但我认为如果有办法做到这一点,它可能会有用。

无论如何,假设我有以下类(class):

class Foo
{
public:
virtual void Show() = 0;
};

如果我想在不继承的情况下使用 Foo 怎么办?有没有一种方法可以简单地执行以下操作(而不是创建一个全新的类来实现 Show):

Foo F;
F.Show = [&]{/*Do something here*/}; //Assign some function or Lambda to Foo instance F

有办法吗?我知道这看起来很愚蠢,但我只需要知道是否可以做到这一点或类似的事情。

显然不能编译:l

最佳答案

Is there a way to do that?

不,你不能实例化Foo如果它有一个纯虚成员函数。

I just have to know if that or something similar can be done.

这取决于你所说的相似是什么意思。如果忘记纯虚的话可以给Foo::Show()一个实现,比如说,一个 std::function<void()> ,您可以从 lambda 表达式设置,另一个 std::function<void()>或具有该签名和返回类型的任何可调用实体。

#include <functional>
class Foo
{
public:
virtual void Show() { fun(); }
std::function<void()> fun;
};

然后

#include <iostream>
int main()
{
Foo f;
f.fun = []{std::cout << "Hello, World!";};
f.Show();
}

注意 正如@MrUniverse 的评论中所建议的,您应该在调用函数之前检查该函数是否已被分配。这很容易做到:

virtual void Show() { if (fun) fun(); };

关于c++ - 纯虚函数覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16728037/

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