Ich hatte ein Problem heute mit dem using
Schlüsselwort in C++11
. Ich entschied mich, jetzt einen anderen Ansatz zu verwenden (hinzugefügt als Kommentare im folgenden Beispiel). Man kann sich X
als eine Matrix vorstellen, von Y
als ein Mixin und das Ziel ist es, auf den durchgesetzten Matrixtyp von X
in Y
zuzugreifen. Anstelle von typedef
in X<B,A>
in X<A,B>
nehmen wir einen anderen Ansatz, der leistungsfähiger ist und einen Sibling
Alias definiert, der selbst zwei Template-Parameter akzeptiert.C++ 11 `using` Schlüsselwort: spezialisieren Vorlage Alias von Vorlage Parameter
template <class A, class B>
struct X
{
using Left = A;
using Right = B;
template <class T1, class T2>
using Sibling = X<T1, T2>;
// using Reversed = X<B, A>; // What I really want and use now. :-)
};
template <class A>
struct Y
{
using Left = typename A::Left;
using Right = typename A::Right;
using AReverse = typename A::Sibling<Right, Left>; // Gives a compiler error
// using AReverse2 = typename A::Reversed; // Works, of course.
};
using Z = X<int,double>::Sibling<double,int>; // Works
Ich habe versucht, den Code oben mit g++-4.7 -std=c++11 -c
Kompilieren und es zeigt mir die folgende Fehlermeldung:
t.cpp:16:9: error: expected nested-name-specifier before ‘AReverse’
t.cpp:16:9: error: using-declaration for non-member at class scope
t.cpp:16:18: error: expected ‘;’ before ‘=’ token
t.cpp:16:18: error: expected unqualified-id before ‘=’ token
Ich verstehe nicht, warum ein eine Fehlermeldung überhaupt erhalten oder, wie ich es beheben könnte. Könnte mir jemand erklären, was das Problem ist?
Vielen Dank!
Dies ist falsch. Außerdem benötigen Sie hier das Schlüsselwort 'typename', da' A :: Sibling <...> 'hier ein abhängiger Typ ist. –