gpt4 book ai didi

c++ - 如何将类函数设置为另一个类函数

转载 作者:行者123 更新时间:2023-11-28 04:20:39 24 4
gpt4 key购买 nike

我有两个类,ClassWorkingTemplateClass,它们没有任何关系。有没有办法说,我希望我的 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。这是该功能的一部分。

由于 TemplateClassClassWorking 无关,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/

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