具有包含另一个类的函数指针的映射的类
Posted
技术标签:
【中文标题】具有包含另一个类的函数指针的映射的类【英文标题】:Class with map containing function pointers of another class 【发布时间】:2011-06-20 16:14:52 【问题描述】:我想做的是有一个包含第二个类的函数指针映射的类,但是第二个类的名称应该无关紧要(不能硬编码到第一个类中)我真的很想成为能够在不使用宏的情况下实现这一点。我遵循了 learncpp.com 上关于函数指针的示例,但是当在类之间传递它们时,我真的迷路了!我的尝试如下:
#include <map>
class Class1;
typedef double(Class1::*memFunc)();
class Class1
private:
std::map<std::string, memFunc> funcMap;
public:
void addFunc(std::string funcName, memFunc function)
funcMap.insert(std::pair<std::string, memFunc>(funcName, function));
;
class MyClass
public:
MyClass()
//How do I add member function getValue() to Class1?
class1.addFunc("new function", getValue());
double getValue()
return 0;
private:
Class1 class1;
;
【问题讨论】:
顺便说一句,您是否还想存储对象的this
指针,该对象的成员函数要存储指针?
@KerrekSB 事实证明,这也是我所需要的。很抱歉我之前没有看到这个回复。
【参考方案1】:
类的名称是函数指针类型的一部分,它成为映射类型的一部分,成为MyClass的一部分。根据“不能硬编码”的要求有多强,也许一个模板就足够了?
#include <string>
#include <map>
template<typename T>
class Class1
typedef double(T::*memFunc)();
std::map<std::string, memFunc> funcMap;
public:
void addFunc(std::string funcName, memFunc function)
funcMap.insert(std::pair<std::string, memFunc>(funcName, function));
;
class MyClass
public:
MyClass()
class1.addFunc("new function", &MyClass::getValue);
double getValue()
return 0;
private:
Class1<MyClass> class1;
;
int main()
MyClass mc;
【讨论】:
哇,我期待一个到处都是指针、结构、宏和类似东西的答案。我忘记了模板如何解决这么多令人头疼的问题。非常感谢! 还有一件事,如果您不介意的话:我将如何从 Class1 中的 MyClass 调用函数指针?假设我从地图中检索到它:double(T::*memFunc)();
memFunc = (*mapIterator).second;
(this->*memFunc)();
这似乎不起作用。
@rem45acp 如果memFunc
是来自MyClass
的函数指针,则需要调用MyClass
类型的对象:ideone.com/YAHSG
是否可以将 *this 传递到模板中,例如:Class1<*this>class1
,避免需要额外的参数?以上是关于具有包含另一个类的函数指针的映射的类的主要内容,如果未能解决你的问题,请参考以下文章