C ++ передать внутреннюю структуру в качестве параметра - PullRequest
5 голосов
/ 26 января 2012

Существует структура TOut, содержащая внутреннюю структуру TIn:

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

    TIn in;
T t;
};

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

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

Ответы [ 2 ]

7 голосов
/ 26 января 2012

Вам необходимо использовать ключевое слово typename:

template <typename T>
static void test ( const typename TOut<T>::TIn &i) {}

См. Где и почему я должен поставить ключевые слова "template" и "typename"?

2 голосов
/ 26 января 2012

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

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

вместо?

...