Кажется, что это должно быть очень просто, но я играл и не нашел решение, которое я ищу, так вот:C++ `using` команда для псевдонима типа в классе шаблонов
у меня есть следующие структуры (упрощено для иллюстративных целей, конечно):
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:
template<typename T>
struct test
{
using L = std::list<T>;
typename L::iterator a;
};
Я предпочел бы избежать дополнительной подробности этого, если это возможно.
2) добавить еще используя утверждение целевой итератор непосредственно:
template<typename T>
struct test
{
using L = std::list<T>;
using iter = typename L::iterator;
iter a;
};
Но это потребует того, чтобы сделать то же самое для каждого итератора я хотел использовать, если я хотел бы также получить доступ к const_iterator
и т. д. и т. д., и я бы предпочел не указывать кучу использования операторов.
Итак, есть ли способ, чтобы написать заявление, используя то позволяет мне писать:
L::iterator a;
L::const_iterator b;
...
Спасибо!
Это лучше, чем мой мета-подход, +1! – Yakk
Спасибо за ответ! В свете того, что я не смог сделать это по-своему, это выглядит самым чистым способом: – jsdw
@lytnus: Рад, что это помогло :) –