c++ - 如何扩展一个函数

标签 c++ function oop

在现代 C++ 中有没有一种方法可以“扩展”一个函数? 也许这个伪代码可以解释我想要什么:

extendable void foo()
{
   doSomething();
}

extend foo()
{
   moo();
}

编译函数 foo() 时应该这样做:

foo()
{
    doSomething();
    moo();
}

我想我可以通过将我想要在 foo() 中拥有的每个函数存储在函数指针的 std::vector 中来做到这一点,并且 foo() 将循环遍历 vector 并运行所有函数。

但是,我需要在编译时执行此操作,因此我无法运行 vector.push_back()

我试图在#define 指令的帮助下做到这一点,但我没有找到解决方案。

提前感谢您的回答。

编辑:我的实际问题

我想实现某种实体组件系统,每个组件都有一个列表。每个实体都有一个指向组件列表中列表元素的 ID。 因为我不想重复创建新型组件的步骤,所以我想制作一个#define-directive 以便为我将创建的每个新组件自动执行此操作。

主要问题是在创建新实体时向每个组件 vector 添加一个元素。 这是我想要工作的代码:

#define addComponent(name)                                          \
    struct name;                                                    \
private:                                                            \
    std::vector<name> name ## vector;                               \
public:                                                             \
    extend addEntity()                                              \
    {                                                               \
        struct name a;                                              \
        name ## vector.push_back(a);                                \
    }                                                               \
    void set ## name(const int & ID, name newName)                  \
    {                                                               \
        name ## vector[ID] = newName;                               \
    }                                                               \
    name get ## name(const int & ID)                                \
    {                                                               \
        return name ## vector[ID];                                  \
    }

class Component
{
public:
    Component();
    ~Component();

    extendable void addEntity(int * ID);

    addComponent(position)
    struct position
    {
        float x, y, z;
    }
};

最佳答案

Can I extend functions?

没有。

你描述的是不可能的。任何机制都不支持让编译器生成一个函数,该函数将调用 foo() 在扩展之前调用的函数。

虚方法不能解决问题,因为它们只提供 Polymorphism。 (希腊语有多种形式)。

关于c++ - 如何扩展一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46025506/

相关文章:

language-agnostic - 对象和实例有什么区别?

c++ - Visual C++ 异或加密错误

C++: 语法错误 C2061: 标识符

javascript - 如果我将要查找的值设置为变量,为什么它不起作用?

oracle - 考虑到在数据库服务器上定义的NLS_NUMERIC_CHARACTERS,如何使用正确的TO_NUMBER()Oracle函数?

c - 字符串编辑器(无法正常工作)

c++ - 用户定义的转换和用户定义的运算符有什么区别?

c++ - 将 unsigned int + 字符串转换为 unsigned char vector

swift - 从函数动态创建对象

java - 在创建对象之前设置实例变量