Tôi đã gặp sự cố ngày hôm nay bằng cách sử dụng từ khóa using
trong C++11
. Tôi đã quyết định sử dụng cách tiếp cận khác ngay bây giờ (được thêm vào dưới dạng ý kiến trong ví dụ bên dưới). Bạn có thể coi X
là ma trận, trong số Y
làm bản mixin và mục đích là truy cập loại ma trận tạm thời là X
trong Y
. Thay vì typedef
ing X<B,A>
trong X<A,B>
, chúng tôi thực hiện một cách tiếp cận mạnh hơn và xác định bí danh Sibling
có hai thông số mẫu.C++ 11 `using` keyword: chuyên mẫu bí danh của tham số mẫu
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
tôi đã cố gắng biên dịch mã trên với g++-4.7 -std=c++11 -c
và nó cho thấy tôi thông báo lỗi sau:
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
Tôi không hiểu tại sao một nhận được một thông báo lỗi ở tất cả hoặc làm thế nào tôi có thể sửa chữa nó. Ai đó có thể giải thích cho tôi vấn đề là gì?
Cảm ơn rất nhiều!
này là không chính xác. Bạn cũng cần từ khóa 'typename' ở đây, bởi vì' A :: Sibling <...> 'là một tên kiểu có phạm vi phụ thuộc ở đây. –