使用变量在类中存储自定义函数

Posted

技术标签:

【中文标题】使用变量在类中存储自定义函数【英文标题】:Using variables to store custom functions in a class 【发布时间】:2020-10-13 17:26:48 【问题描述】:

我正在尝试创建一个包含一些成员变量的类,这些成员变量存储或指向函数,或者可以分配不同的行为来描述如何处理对象中的其他变量。

class C 
    int n;
    void *data;
    // buidData: It allocates and stores data using the data pointer avobe to be processed later
    // processData: It does something with n and data

    public:
    void run(); //performs processData 
    // setters needed...


这里,buildDataprocessData 可能只是做一件事的方法:也许 buildData 为 double 分配内存,processData 将 n^3 存储在分配的位置。

我需要的是变量:一些函数类型的变量,或者函数指针,它们可以以某种方式被分配一个描述其行为的代码。因此,它可能不只是总是计算 n^3,而是可以构建一个随机的 n 个元素列表,当 process 函数运行时删除重复项,存储从控制台读取的文件名并处理具有该名称的文件,或者......漂亮几乎什么都没有(或什么都没有)。

因此,在概念上,我想要空方法,我可以使用以前存在的代码以参数方式轻松借用其行为。

我强烈地感觉到 C++ 为我提供了执行此操作的工具(lambda 函数、函数指针、<functional>... 中的函数类型),但有几个月我还没有到达那里。

我怎么可能声明buildDataprocessData 以及应该如何以一种优雅的方式分配他们的“工作”?

【问题讨论】:

void * 不是任何 C++ 问题的有效解决方案。 函数的参数是否相同?还是它们有随机参数和可变数量的参数? 非常感谢。但是我发现了很多非解决方案。我只是想描绘我的目标是什么,一旦我学会了如何使用它,我会很乐意使用任何合适的 c++ 技术。提及指向任何类型数据的通用指针类似于我使用函数的目标,但任何改进问题的建议都会促使我尽快对其进行编辑。 @Surt 这个想法是,它们可以由存储在对象中的数据以一种或另一种方式引导。我的方法是将它们视为可以访问一对或成员变量的 void 方法。但遗憾的是我的 c++ 知识很浅,所以它可能不是最好的方法。如果它允许我采用预先存在的代码并对其进行调整,以便班级可以观察正在做什么,我们可以使用固定的原型,或者完全灵活的东西。 【参考方案1】:

听起来您正在寻找std::function。您可以按照为原始成员分配默认值的相同方式分配默认函数,但如果需要,然后覆盖 C 的构造函数中的函数。

或者,您可以使用经典的 OOP 解决方案,其中 C 是具有默认行为的基类,但允许用户扩展到 overrides 的子类 buildDataprocessData 的行为.

【讨论】:

是的。我认为 std::function 路由更有希望,但我似乎没有找到正确的语法来使用它。您能否给我任何关于如何创建覆盖 buildData 和/或 processData 的默认行为的类的对象的提示?第二种解决方案确实可以解决我想要解决的实际问题,但它会让我通过继承重写这些方法并为我需要的每个对象创建一个新的子类。这个想法是我可以声明一个对象并为其分配一些任务,以便类的其余部分可以从这些任务的性能中提取信息。 还有。第二条路线不允许我学习更多的 C++ 技术,这本身就是一个目标。 感谢您的回答。我终于找到了一种使它与 std::function 一起工作的方法。但是我的第一个方法非常丑陋和笨拙(使用与调用真实函数的类成员原型匹配的 lambda 表达式)。我想改进它。我应该更新这个问题还是发布一个不同的问题? @xcaliph 我会问一个新问题。如果代码现在可以运行,您可能会在Code Review StackExchange 获得更多有用的回复。

以上是关于使用变量在类中存储自定义函数的主要内容,如果未能解决你的问题,请参考以下文章

C ++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)[重复]

自定义内存管理(五十七)

extjs怎么自定义函数

如何在静态方法或自定义类中注入 HttpClient?

Excel DNA学习笔记简单的UDF自定义函数

能定义在类中的内容