Да, такое сделать нельзя. Сам подумай, как должна быть устроена таблица виртуальных функций для твоего случая (если бы так можно было делать).
template <class T>
class A
{
public :
virtual void fun(T);
};
A<int >a;
Тут понятно, для класса можно сгенерить таблицу. "Поместить туда адрес" A<int>::fun(int);
А как быть, если эта функция еще и шаблон?
Of course, the code must be complete enough to compile and link .
Как сделать предв. объявление шаблонного класса?
Здравствуйте!
Было так:
class Context;
class Strategy
{
void algoritm1(Context* pContext);
}
Теперь Context стал шаблонным классом.
template <class T>
class Context
{
T* m_pStrategy;
}
Как переделать объявления? С методом вроде бы так:
class Strategy
{
template <T>
void algoritm1(Context<T>* pContext);
}
А вот предварительное объявление калсса не получается
Re: Как сделать предв. объявление шаблонного класса?
template <class >class Content;
Of course, the code must be complete enough to compile and link .
Re: Как сделать предв. объявление шаблонного класса?
От:
Bell
Дата: 16.12.03 14:49
Оценка:
Здравствуйте, Constructor, Вы писали:
template <class T>
class cls1;
class cls2
{
template <class T>
void fun(cls1<T>*);
};
Любите книгу — источник знаний (с) М.Горький
Моя метод — виртуальный. Компилятор пишет, что так нельзя. Почему?
Хочу вызывать только методы этого шаблонного класса, параметр шаблона мне не нужен...
Шаблонная функция-член виртуальной быть не может (если ты об этом)
Of course, the code must be complete enough to compile and link .
От:
Demay
Дата: 17.12.03 09:47
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:
L_L>Шаблонная функция-член виртуальной быть не может (если ты об этом)
Достаточно объявить виртуальную функцию в базовом классе, чтобы унаследовать
ее в параметризованном. Возможно не совсем понял вопроса, например такой вариант:
class First {
public:
int m_primer;
virtual void fn() {}
};
template <int DATA_T>
class Second : public First {
public:
virtual void fn() {
m_primer = DATA_T;
}
};
По-видимому, речь шла о попытке сделать такое:
template <class >
class NotCompilable
{
template <class T>virtual void fun(T);
};
Of course, the code must be complete enough to compile and link .
Здравствуйте, Lorenzo_LAMAS, Вы писали:
L_L>По-видимому, речь шла о попытке сделать такое:
L_L>L_L>template <class >
L_L>class NotCompilable
L_L>{
L_L> template <class T>virtual void fun(T);
L_L>};
L_L>
да
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить