如何使此模板 typedef 在 C++11 中有效?

how to make this template typedef valid in c++11?

我有这样的代码片段

  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.
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>
   ^