【发布时间】:2014-02-13 22:03:30
【问题描述】:
我正在使用混合 c/c++ 来模仿面向对象的实践。这是一个家庭作业,我不喜欢这个答案,但也许可以找到它的位置。
我们被分配去创造:
1) 通用结构
2) 这个结构可以容纳任何类型的数据成员
3) 这个结构可以容纳任何函数
正如我的老师解释的那样,我们将把数据成员、它们的名称、函数和它们的名称保存到四个单独的向量中。我已经有类似的东西了
struct GenericClass
{
vector < void*(*)(GenericClass& gc, void* p) > funcs; //A void pointer whose parameters are a void pointer
vector < string > funcsNames; //Name of the function (void pointer)
vector < void* > data;
vector < string > dataNames;
我们需要能够将函数添加到“funcs”中。我们应该能够添加的函数必须:1) 返回 (void*) 和 2) 将 (void*) 作为参数传入函数。我已经写了一个函数来做到这一点,虽然它不完整
void addFunction(GenericClass& gc, void* (*fn)(GenericClass& gc, void* v), string name)
{
gc.funcs.push_back(*fn); //??
gc.funcsNames.push_back(name);
return;
}
我知道我必须在“gc.funcs”中添加一个函数指针,该指针能够有一个 (void*) 作为可选参数(显然我不希望在这个函数中使用这个......?)返回一个 (void *) 但由于这是我第一次涉足函数指针池,任何人都可以指出我可能需要查看的方向吗?谢谢
【问题讨论】:
-
我只是很好奇为什么你的老师认为这是一个理智/重要的学习...
-
@olevegard 请,这只是题外话。我目前正在使用嵌入 lua,这是一个非常相似的情况。这是一个用例。
-
@olevegard - 这只是一个教我们函数指针的练习和函数式编程的介绍 πάνταῥεῖ - 请参阅我的其他评论,这只是学习函数指针及其工作原理的一课。
-
+1 这是一个关于 c++ 原理的完全有效的问题。不知道为什么这么多人笑。