LINUX.ORG.RU

Использование типа параметра шаблона, еще не определенного

 


0

2

Есть такой код:

namespace ns {

template< typename T >
struct Buffer { T data; };

struct A {
void m( Buffer< B::ForwardType > arg ) {}
};

struct B {
typename char ForwardType;
};

} // end of ns

Как правильно объявить шаблонный аргумент arg метода A::m ?

либо объявить struct A после struct B, либо struct A так же сделать шаблоном, передавая ему ForwardType.

vvviperrr ★★★★★
()
Ответ на: комментарий от vvviperrr

решилось так: метод m у меня не виртуальный, поэтому сделал его шаблонным методом класса.

nerdogeek
() автор топика
namespace ns {

template< typename T >
struct Buffer { T data; };

template <typename T>
struct A {
void m( Buffer< T > arg ) {}
};

struct B {
typename char ForwardType;
};

} // end of ns
nanoolinux ★★★★
()

В таком виде — никак. Метод m не может быть скомпилирован, пока не известны полностью типы его аргументов.

Сделав его шаблонным, ты тем самым избежал его компиляции.

Кстати, почему typename, а не расово верный typedef?

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

typedef, да. опечатка.
любой плюсовый компилятор стремится стать однопроходным, вот что я скажу. такое вот ворчание.

nerdogeek
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.