これは本当に単純なはずですが、私は遊んでいて、探している解決策をまだ見つけていないので、ここに行きます:
私は次の構造体を持っています(もちろん説明のために単純化されています):
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
これまでに見つけた2つの修正方法は、どちらも理想的ではありません。
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;
};
しかし、etc などにもアクセスしたい場合は、使用したいすべてのイテレータに対して同じことを行う必要がありconst_iterator
、一連の using ステートメントを定義する必要はありません。
それで、私が書くことを可能にするusingステートメントを書く方法はありますか:
L::iterator a;
L::const_iterator b;
...
ありがとう!