好吧,我有一个有点愚蠢的问题,但我认为如果有办法做到这一点,它可能会有用。
无论如何,假设我有以下类(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/