假设我有以下内容:
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);
}
在上面的例子中,在map键中我们传递一个字符串,在map值中是一个指向类X方法的指针。例如,要在这个地图中插入,我正在使用:
m_callback.insert(std::pair<std::string, xMethod>("voltage", &X::getPower));
使用此功能,我只能插入 METHOD_NAME 类型的方法(浮点数*)
但是,我想插入类型__METHOD_NAME__(int *value)
的map方法(例如,参见'int'而不是'float')。
我想要做到这一点,我需要一个模板。但是怎么样?有办法解决这个问题吗?
答案 0 :(得分:1)
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));
}
};