获取传递给模板函数的std :: map的值类型

时间:2012-12-06 09:31:52

标签: c++ dictionary templates

拥有模板功能 -

template <class B>
B getValue (B& map) {
    // implementation ...       
}

对此功能传递map,如 -

map<string,double> doubleMap;
getValue (doubleMap);

例如,在这种情况下,如果我想根据double将函数的返回值设置为doubleMap,我应该提取value这个map类型,如果我想根据传递的地图声明一个double(或任何其他类型),我必须有这个..

我怎样才能得到它?

2 个答案:

答案 0 :(得分:6)

std::map定义成员类型key_typemapped_type

您想要的是B::mapped_type,在您的情况下为double

答案 1 :(得分:2)

您可以创建一个接收容器的模板,并使用typedef导出其类型参数:(一般tamplate参数类型检索的示例)

template <typename>
class GetTemplateArgs {};

template <typename ARG1, typename ARG2>
class GetTemplateArgs<std::map<ARG1,ARG2>>
{
  public:
    typedef ARG1 KEY;
    typedef ARG2 DATA;
};

template <class B>
typename GetTemplateArgs<B>::DATA getValue (B& map) {
    // implementation ...       
}

当然,你可以使它更具体地用于地图,所以它只会接收地图作为参数。