如何使此模板 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;
所以我尝试使用 template
和 using
来实现:
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>
^
我有这样的代码片段
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;
所以我尝试使用 template
和 using
来实现:
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> ^