这看起来应该很简单,但我一直在玩,还没有找到我正在寻找的解决方案,所以这里是:
我有以下结构(当然为了说明目的而简化):
template<typename T>
struct test
{
using L = std::list<T>;
L::iterator a;
};
现在,这会引发错误:
error: need 'typename' before 'test<T>::K::iterator' because 'test<T>::K' is a dependent scope
到目前为止,我发现的两种修复方法都不太理想:
1)在使用 L 之前添加 typename:
template<typename T>
struct test
{
using L = std::list<T>;
typename L::iterator a;
};
如果可能的话,我宁愿避免这种额外的冗长。
2)添加另一个 using 语句以直接针对迭代器:
template<typename T>
struct test
{
using L = std::list<T>;
using iter = typename L::iterator;
iter a;
};
但这需要对我想使用的每个迭代器都做同样的事情,如果我还希望访问const_iterator
etc 等,我宁愿不必定义一堆 using 语句。
那么,有没有办法编写 using 语句,然后允许我编写:
L::iterator a;
L::const_iterator b;
...
谢谢!