Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | |
[C++] [C++] шаблоны - члены класса шаблона 13.06.01 18:54 Число просмотров: 891
Автор: XR <eXtremal Research> Статус: The Elderman
|
> не знаю, какой компайлер это компилит... BCB5 воспринимает > такое И ТОЛЬКО решение: > template<classT> > template<class TT> > void B<T>::make( TT& ) > {}
Такую конструкцию gcc 2.91.66
шлет лесом ... да и ANSI
это вообще то
template <class T, class TT>
BTW:
template<class T1>
template<class T2>
class A {
T1 t1;
T2 t2;
public:
A(T1& T2&);
....
};
template<class T1>
template<class T2>
A<T1,T1>::A(T1& t1, T2& t2)
{
...
}
И вовсе срывает компайлеру крышу ... и это правильно :)
|
<programming>
|
[C++] шаблоны - члены класса шаблона 11.06.01 14:36
Автор: Yehor Статус: Незарегистрированный пользователь
|
все на BCB5 - ANSI C++ compliance
попробуем определить шаблонный метод класса шаблона:
template<typename T>
struct B
{
template<typename TT>
void make( TT& t );
};
вроде как надо: определение шаблонной функции вне класса:
template<typename T, typename TT >
void B<T>::make( TT& t )
{
}
А НЕ КОМПИЛИТСЯ. если определять ВНУТРИ класса, все проходит.
проблема с синтаксисом. Кто знает, как правильно?
|
|
[C++] шаблоны - члены класса шаблона 11.06.01 16:24
Автор: kabanchik Статус: Незарегистрированный пользователь
|
если Т и ТТ у тебя разные типы, то так
template <typename T, typename TT>
struct B // тут не имеет принципиальной разницы, но лучше писать class B
{
void make(TT &t)
};
template <typename T, typename TT>
void B::make(TT& t)
{
}
И ТОЛКЬ ТАК !!!!
а то что ты в классе писал и он компилился, ето не значит, что он заравотал бы.
немного иной ситаксис для шаблонных ф-ий дружественным к шаблонному классу
|
| |
[C++] [C++] шаблоны - члены класса шаблона 13.06.01 16:20
Автор: Yehor Статус: Незарегистрированный пользователь
|
> > если Т и ТТ у тебя разные типы, то так > > template <typename T, typename TT> > struct B // тут не имеет принципиальной разницы, но лучше > писать class B > { > void make(TT &t) > }; > > template <typename T, typename TT> > void B::make(TT& t) > { > } > не знаю, какой компайлер это компилит... BCB5 воспринимает такое И ТОЛЬКО решение:
template<classT>
template<class TT>
void B<T>::make( TT& )
{}
|
| | |
[C++] уточнение 13.06.01 22:00
Автор: kabanchik Статус: Незарегистрированный пользователь
|
> > > > если Т и ТТ у тебя разные типы, то так > > > > template <typename T, typename TT> > > struct B // тут не имеет принципиальной разницы, но > лучше > > писать class B > > { > > void make(TT &t) > > }; > > > > template <typename T, typename TT> > > void B::make(TT& t) > > { > > } > > ^^^^^^^^^^^^^^^^^
тут я х..ню сморозил, невнимательность, надо так
template <typename T, typename TT>
void B<T, TT>::make(TT& t)
____^^^^^^^^^^
{
}
и это что для MS VC++, что для g++, и по моему везде так, ну во всяком случае у большинства.
а с борландом не работал, не знаю.
|
| | |
Вдогон: BC++ 5.02 шлет сии конструкции тем же лесом, но крышу у него не срывает как у gcc :) 13.06.01 19:21
Автор: XR <eXtremal Research> Статус: The Elderman
|
template<classT>
template<class TT>
|
| | |
[C++] [C++] шаблоны - члены класса шаблона 13.06.01 18:54
Автор: XR <eXtremal Research> Статус: The Elderman
|
> не знаю, какой компайлер это компилит... BCB5 воспринимает > такое И ТОЛЬКО решение: > template<classT> > template<class TT> > void B<T>::make( TT& ) > {}
Такую конструкцию gcc 2.91.66
шлет лесом ... да и ANSI
это вообще то
template <class T, class TT>
BTW:
template<class T1>
template<class T2>
class A {
T1 t1;
T2 t2;
public:
A(T1& T2&);
....
};
template<class T1>
template<class T2>
A<T1,T1>::A(T1& t1, T2& t2)
{
...
}
И вовсе срывает компайлеру крышу ... и это правильно :)
|
|
|