C++ 类型别名错误:'using'之前的预期非限定 ID

C++ Type alias error: expected unqualified-id before 'using'

本文关键字:ID using 别名 类型 错误 C++      更新时间:2023-10-16

有很多资源解释如何做Type混叠,但显然我遗漏了一些东西。我正在尝试创建一个地图别名。在调试时,我希望我的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'。我尝试了以上几种方法,但都没有成功。提前感谢您的意见。

更新:我觉得我可能把b树部分也算进去了,让大家有点困惑。让我展开一点。如果我声明类型为

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;

引导错误。

你的语法有点错误。你需要

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;