2015-11-02 14 views
6

Tôi đang cố truy cập thành viên typedef trong lớp cơ sở từ mẫu lớp dẫn xuất. Trong tên mẫu của tham số mẫu giống như tên của typdef trong lớp cơ sở.Truy cập lớp cơ sở typedef trong mẫu lớp dẫn xuất

#include <iostream> 

using namespace std; 
class no { 
    public : 
    typedef int T; 
}; 
template<typename T> class no1 : public no { 
    public : 
    T obj; 
}; 
int main() { 
    // your code goes here 
    no1<string> o ; o.obj = "1"; 
    return 0; 
} 

14:24: error: invalid conversion from 'const char*' to 'no::T {aka int}' [-fpermissive] 
    no1<string> o ; o.obj = "1"; 

Trong mã trên, T là obj luôn là loại int. Làm thế nào tôi có thể buộc obj được tham số mẫu và không typdef khai báo trong lớp cơ sở?

Cảm ơn

+0

Bạn không thể mà không cung cấp một chuyển đổi rõ ràng từ 'T' cho' int'. Cũng lưu ý rằng tham số mẫu 'T' chỉ _shadows_' no :: T', chúng không liên quan. –

+0

Đó là câu hỏi của tôi là cách truy cập thông số mẫu T mà không thay đổi lớp cơ sở hoặc đổi tên tham số mẫu? – noname

+0

Một lần nữa, bạn không thể. –

Trả lời

0

làm việc này cho tôi:

template<typename T> class no1; 
template<typename T> 
struct underlying_type_of; 

template<typename T> 
struct underlying_type_of<no1<T> > 
{ 
    typedef T type; 
}; 
template<typename T> class no1 : public no { 
public : 
    typename underlying_type_of<no1>::type obj; 
}; 
Các vấn đề liên quan