可视化工作室上带有容器迭代器的别名模板

Alias template with container's iterators on Visual Studio

本文关键字:迭代器 别名 工作室 可视化      更新时间:2023-10-16

下一个代码块编译得相当成功:

#include <map>
template<typename KEY>
using umap = std::map<KEY, std::wstring>;
int main()
{
  umap<int> m;
  umap<double> m2;
}

同时,以与映射相同的方式添加迭代器模板会使编译器发誓并抱怨错误 C2061:语法错误。所以下一个块不会编译:

template<typename KEY>
using umap = std::map<KEY, std::wstring>;
template<typename KEY>
using iter = std::map<KEY, std::wstring>::iterator;
int main()
{
  umap<int> m;
  umap<double> m2;
}

我们不能将别名声明与迭代器一起使用吗?为什么?并且会是一种解决方法吗?

你需要在 std::map<KEY, std::wstring>::iterator 之前使用 typename 关键字,因为它是一个依赖范围。

因此,您的第二个代码应该是:

template<typename KEY>
using umap = std::map<KEY, std::wstring>;
template<typename KEY>
using iter = typename std::map<KEY, std::wstring>::iterator;
int main()
{
  umap<int> m;
  umap<double> m2;
}