2012-01-25 46 views
5

Có một tout cấu trúc chứa cấu trúc bên trong Tín:C++ thông qua cấu trúc bên trong như tham số

template <typename T> 
struct TOut 
{ 
    struct TIn 
    { 
      bool b; 
    }; 

    TIn in; 
T t; 
}; 

Làm thế nào để vượt qua một cách chính xác thiếc tại như một tham số chính thức của một số phương pháp?

class Test 
{ 
public: 
    template <typename T> 
    static void test (const TOut<T>::TIn &i) {} //Error 
}; 


int main() 
{ 
TOut <double> o; 
Test::test(o.in); 
} 

Chương trình biên dịch với các lỗi sau:

Error 4 error C2998: 'int test' : cannot be a template definition 
+0

http://stackoverflow.com/questions/7178948/problem-with-functions-accepting-inner-classes-of-template-classes – Lol4t0

+0

@TJD 'Tin' sẽ là loại đã biết (" cụ thể ") nếu nó nơi được khai báo bên cạnh 'Tout' hoặc bên trong một lớp không phải mẫu. Tại thời điểm OP gặp lỗi, 'Tin' vẫn chưa được biết, bởi vì' TOut 'chưa được khởi tạo. BTW, thuật ngữ "bê tông" thường được sử dụng trong ngữ cảnh thừa kế (ngược lại với "trừu tượng"). –

Trả lời

2

Tại sao bạn không thể sử dụng đơn giản hơn

template <typename T> 
static void test (const T& i) 

thay thế?

Các vấn đề liên quan