c++ - 在 map 值中插入一个类方法并使用模板

标签 c++ templates methods dictionary

假设我有以下内容:

class X
{
  private:
    typedef int (X::*xMethod) (float*);

    typedef std::map<std::string, xMethod> callback_t;

    callback_t m_callback;

  public:

    getPower(float *value);
    getTemperature(float *value);
}

在上面的示例中,我们在映射键中传递一个字符串,在映射值中传递一个指向类 X 的方法的指针。例如,要插入此映射,我正在使用:

m_callback.insert(std::pair<std::string, xMethod>("voltage", &X::getPower));

使用它,我只能插入类型为METHOD_NAME(float *value)

的方法

但是,我想在映射方法中插入类型为 __METHOD_NAME__(int *value) 的方法(请参阅此处的“int”而不是“float”)。

我想要做到这一点,我需要一个模板。但是怎么办?有办法解决吗?

最佳答案

C++98 中没有模板 typedef,但您可以将通用性包装到辅助结构中。示例代码并排显示了您自己的版本和我的通用版本。

#include <map>
#include <string>

class Foo
{
  typedef int (Foo::*xMethod)(float*);
  typedef std::map<std::string, xMethod> cb_map;

  template <typename T> struct CBHelper
  {
    typedef int (Foo::*fptype)(T*);
    typedef std::map<std::string, fptype> type;
  };

  cb_map m_cb_float;
  CBHelper<int>::type m_cb_int;

public:
  int getF(float *);
  int getI(int *);
  Foo()
  {
    m_cb_float.insert(cb_map::value_type("Hello", &Foo::getF));
    m_cb_int.insert(std::make_pair("Hello", &Foo::getI));
  }
};

关于c++ - 在 map 值中插入一个类方法并使用模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6419021/

相关文章:

C++构造函数和并发

c++ - "final"指令的 "task"子句是否正确?

c++ - 使用以前未知的模板存储通用对象

java - 为什么我不能在Java方法中为数组赋值?

c# - this[参数] 语法的用途是什么?

go - 在未导出的字段上调用导出的方法

c++ - 免费谷歌翻译

c++ - GCC 4.6.2 内联行为

c++ - 一个类如何继承自己?

C++模板结果类型