如何使这个模板typedef在c ++ 11中有效?

时间:2018-01-12 07:16:54

标签: c++ c++11 templates using

我有一个像这样的代码片段

  map<string, map<string, map<string, float> > >  map_f;
  map<string, map<string, map<string, string> > > map_s;
  map<string, map<string, map<string, double> > > map_d;

我只想简明扼要地编写这段代码:

myMap<float>   map_f;
myMap<string>  map_s;
myMap<double>  map_d;

所以我尝试使用templateusing来实现这一目标:

template<type T>
    using myMap = map<string, map<string, map<string, T> > >;

但是,我收到了一个错误:

error: expected expression
template<type T>

我的问题是,如何修改此代码以及此错误的含义是什么?

代码已经显示出来了:

#include <string>
#include <map>
using namespace std;

int main()
{
  template<typename T>  
    using myMap = map<string, map<string, map<string, T> > >;
  return 0;
} 

我在c++ 4.2.1 @ mac osX 10.13.2上编译它:

g++ -std=c++11 temp_def_cls.cxx -o main

我收到了错误:

temp_def_cls.cxx:7:3: error: expected expression
  template<typename T> 
  ^
1 error generated.

1 个答案:

答案 0 :(得分:1)

template<typename T>
    using myMap = map<string, map<string, map<string, T> > >;

type在C ++中并不特别。您需要keyword typename(或class此处)。

将该指令移出main()。我使用了GCC 7.2.0,消息更加清晰:

t.cpp: In function ‘int main()’:
t.cpp:7:3: error: a template declaration cannot appear at block scope
   template<typename T>
   ^