- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个类,ClassWorking
和 TemplateClass
,它们没有任何关系。有没有办法说,我希望我的 TemplateClass
中的函数 TemplateGenerate()
现在表现得像我的类中的函数 generate()
ClassWorking
.
像一个(这个函数不存在)SetFunctionBehavior(&templateClassRef->templateGenerate, &classWorkingRef->generate)
我知道我可以使用函数指针让 TemplateClass
接收一个指针并在类中调用它,但这不是我想要的。
它更像是一个LD_Preload
,用于替换函数的内部,而不必重写它,也不需要从拥有它的类继承。
更明确一点,让我们把它看作类的节点构造
TemplateClass
可以有多个函数,但行为不同
- TemplateClass
- TemplateGenerate() {will do this}
- TemplateGenerate() {will do that}
- TemplateGenerate() {will do like that}
当我声明我的类指针时 templateClassRef->TemplateGenerate = TemplateGenerate() {will do that}
但不是 lambda :)
关键是要有一些真正通用的东西,而不必为每个需要重新创建一个类,例如我可以有一个类:
TemplateGenerate
- function A {A1 Behavior} Functiun B {B1 Behavoir} Functiun C {C1 Behavior}
{A2 Behavior} {B2 Behavoir} {C2 Behavior}
{A3 Behavior} {B3 Behavoir} {C3 Behavior}
当我声明我的函数时,我说我采用 A1、B2、C3 或 A1、B1、C2
最佳答案
ClassWorking::generate
方法是一个接受 ClassWorking
并执行操作的函数。
具有相同行为的函数也采用 ClassWorking
。这是该功能的一部分。
由于 TemplateClass
与 ClassWorking
无关,TemplateClass::templateGenerate
方法“表现相似” ClassWorking::generate
不能成功;你没有 ClassWorking
,所以 ClassWorking::generate
的先决条件之一没有被满足。
现在,可能是 ClassWorking::generate
的实现 实际上不需要 ClassWorking
的实例。它可能需要其他东西。
但要让编译器知道这一点,您必须更改该方法,使其从 ClassWorking
的方法变为其他方法。例如,您可以编写一个免费函数 generate
,它接受您实际需要的参数,并让 ClassWorking::generate
调用该免费函数.
然后从 stub 方法 TemplateClass::templateGenerate
调用自由函数 generate
变得微不足道。
C++ 不支持“按我的意思做”或“读懂我的想法”。你实际上必须告诉编译器你想要发生什么。类型在 C++ 中很重要,因此您不能在不告诉 C++ 类型如何关联的情况下将一个类上的方法连接到另一个类。
有些语言的类型比较松散,您实际上可以从一个类中获取一个方法并将其粘附到另一个类中。这些通常是解释性语言,具有比 C++ 更重的运行时对象模型;这种语言中的成员被实现为命名值的属性包,值实际上是运行时的变体,等等。
您可以在 C++ 中实现那种对象,但它不是“原生”C++ 对象,您将不得不编写一堆胶水代码(其中一些可能被元编程隐藏)。这远不是初学者的任务,而且通常是个坏主意;如果您需要脚本语言的灵 active ,只需使用脚本语言即可。
关于c++ - 如何将类函数设置为另一个类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55512555/
我是一名优秀的程序员,十分优秀!