有很多资源解释如何进行类型别名,但显然我遗漏了一些东西。我正在尝试创建一个地图别名。在调试时,我希望我的Map_t
成为标准库map
,因为它更容易看到它包含的内容,并且在不调试时我希望它是btree::btree_map
,因为它使用更少的内存。
为此,我尝试了以下方法:
#if DEBUG
#include <map>
template<typename U, typename V>
using Map_t = map<typename U, typename V>; // <--- Error on this line
#else
#include "btree_map.h"
template<typename U, typename V>
using Map_t = btree::btree_map<typename U,typename V>; // <--- Error on this line
#endif
编译时我收到错误error: expected unqualified-id before 'using'
。我已尝试过上述几种变体而没有成功。提前感谢您的意见。
更新: 我觉得我可能会让这个有点混乱,包括btree部分。所以让我扩大一点。如果我将我的类型声明为
btree::btree_map<int, int> mymap;
或
map<int, int> mymap;
一切都很好。但只是想介绍
template<typename U, typename V>
using Map_t = map<U, V>;
Map_t<int, int> mymap;
导致错误。
答案 0 :(得分:1)
您的语法略有错误。你需要
template<typename U, typename V>
using Map_t = map<U, V>;
至于btree
段,它取决于btree
的详细信息。如果它是一个名为btree_map
的类模板的命名空间,那么您需要
template<typename U, typename V>
using Map_t = btree::btree_map<U, V>;
如果它是具有内部类型的类模板,那么您可能需要类似
的内容template<typename U, typename V>
using Map_t = typename btree<U,V>::btree_map;