拥有模板功能 -
template <class B>
B getValue (B& map) {
// implementation ...
}
对此功能传递map
,如 -
map<string,double> doubleMap;
getValue (doubleMap);
例如,在这种情况下,如果我想根据double
将函数的返回值设置为doubleMap
,我应该提取value
这个map
的类型,如果我想根据传递的地图声明一个double(或任何其他类型),我必须有这个..
我怎样才能得到它?
答案 0 :(得分:6)
std::map
定义成员类型key_type
和mapped_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 ...
}
当然,你可以使它更具体地用于地图,所以它只会接收地图作为参数。