【发布时间】:2018-02-12 00:14:48
【问题描述】:
在现代 C++ 中有没有办法“扩展”一个函数? 也许这个伪代码可以解释我想要什么:
extendable void foo()
{
doSomething();
}
extend foo()
{
moo();
}
编译函数foo()时应该这样做:
foo()
{
doSomething();
moo();
}
我想我可以通过将我想要在foo() 中拥有的每个函数存储在函数指针的 std::vector 中来做到这一点,foo() 将循环通过向量并运行所有函数。
但是,我需要在编译时执行此操作,因此我无法运行 vector.push_back()。
我尝试在#define 指令的帮助下执行此操作,但没有找到解决方案。
提前感谢您的任何回答。
编辑:我的实际问题
我想实现某种实体组件系统,每个组件都有一个列表。每个实体都有一个 ID,指向组件列表中的列表元素。 因为我不想重复创建新类型组件的步骤,所以我想创建一个#define-directive 来为我将创建的每个新组件自动执行此操作。
主要问题是在创建新实体时向每个组件向量添加一个元素。 这是我想要工作的代码:
#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;
}
};
【问题讨论】:
-
这被称为“虚拟方法”。而且它不是“现代的”,但它自 C++ 诞生以来就存在。
-
让我们后退一步 - 为什么需要这个?
-
这似乎是XY problem。
-
@DariusDuesentrieb:请编辑您的问题以激发更多动力,并解释为什么您想要做这些事情以及为什么样的程序。
-
你的宏显然不能也不能工作。那么你是如何考虑解决你的问题的(我仍然觉得很不清楚,即使在编辑之后)?