C ++类型别名错误:在使用'之前预期的nonqualified-id

时间:2014-07-10 15:34:24

标签: c++ templates alias typedef typename

有很多资源解释如何进行类型别名,但显然我遗漏了一些东西。我正在尝试创建一个地图别名。在调试时,我希望我的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;

导致错误。

1 个答案:

答案 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;