在现代 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/