这似乎应该很简单,但我已经尝试了一些方法还没有找到我要的解决方案,所以现在就来提问:
我有一个下面这个结构体(当然这里只是为了说明目的而简化了):
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
等内容,那就需要为每个迭代器都这样做,而我不想定义一堆using语句。因此,是否有一种方法可以编写using语句,然后允许我编写以下内容: L::iterator a;
L::const_iterator b;
...
谢谢!