假设我有以下内容:
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/