2012-01-25 3 views
5

Существует структуру Tout, содержащую внутреннюю структуру Олово:C++ передать внутреннюю структуру в качестве параметра

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

    TIn in; 
T t; 
}; 

Как правильно пройти олово в качестве формального параметра некоторого метода?

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


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

Программа компилируется со следующей ошибкой:

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' будет известным (« конкретным ») типом, если он где объявлено рядом с «Tout» или внутри класса без шаблона. В тот момент, когда OP получает ошибку, 'Tin' пока не известен, потому что' TOut 'еще не создан. Кстати, термин «конкретный» обычно используется в контексте наследования (напротив «абстрактного»). –

ответ

2

Почему вы не можете использовать более простой

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

вместо этого?

Смежные вопросы