具有包含另一个类的函数指针的映射的类

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-&gt;*memFunc)(); 这似乎不起作用。 @rem45acp 如果memFunc 是来自MyClass 的函数指针,则需要调用MyClass 类型的对象:ideone.com/YAHSG 是否可以将 *this 传递到模板中,例如:Class1&lt;*this&gt;class1,避免需要额外的参数?

以上是关于具有包含另一个类的函数指针的映射的类的主要内容,如果未能解决你的问题,请参考以下文章

不同类的成员函数指针的C++映射

包含指向派生模板类的基类指针的类的赋值运算符和复制构造函数

在 C++ 中为具有包含指针的集合的类编写复制构造函数

使用具有抽象基类指针并调用派生类函数的映射

如何为具有自引用指针的类实现复制构造函数/赋值运算符?

C ++ - 通过getter函数在单独的类中从对象指针映射访问成员函数