Re[6]: Почему???
От: Lorenzo_LAMAS  
Дата: 17.12.03 10:04
Оценка: 4 (1)
Да, такое сделать нельзя. Сам подумай, как должна быть устроена таблица виртуальных функций для твоего случая (если бы так можно было делать).

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.
Как сделать предв. объявление шаблонного класса?
От: Constructor  
Дата: 16.12.03 14:41
Оценка:
Здравствуйте!

Было так:
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: Как сделать предв. объявление шаблонного класса?
От: Lorenzo_LAMAS  
Дата: 16.12.03 14:47
Оценка:
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>*);
};
Любите книгу — источник знаний (с) М.Горький
Re: Почему???
От: Constructor  
Дата: 16.12.03 14:57
Оценка:
Моя метод — виртуальный. Компилятор пишет, что так нельзя. Почему?
Хочу вызывать только методы этого шаблонного класса, параметр шаблона мне не нужен...
Re[2]: Почему???
От: Lorenzo_LAMAS  
Дата: 16.12.03 14:59
Оценка:
Шаблонная функция-член виртуальной быть не может (если ты об этом)
Of course, the code must be complete enough to compile and link.
Re[3]: Почему???
От: 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;
}
};
Re[4]: Почему???
От: Lorenzo_LAMAS  
Дата: 17.12.03 09:53
Оценка:
По-видимому, речь шла о попытке сделать такое:
template<class>
class NotCompilable
{
    template<class T>virtual void fun(T);
};
Of course, the code must be complete enough to compile and link.
Re[5]: Почему???
От: Constructor  
Дата: 17.12.03 09:58
Оценка:
Здравствуйте, 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>


да
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.