Как реализовать?
Можно ли оставить без реализации один из методов шаблона-предка, а после описать его в потомках?
Что-то наподобие:
template <typename T>
class base
{
...
virtual void some();
};
template <typename T>
class sonA
{
...
virtual void some();
};
template <typename T>
void sonA<T>::some()
{
...
}
template <typename T>
class sonB
{
...
virtual void some();
};
template <typename T>
void sonB<T>::some()
{
...
}
Здравствуйте, WebErr, Вы писали:
WE>Как реализовать?
WE>Можно ли оставить без реализации один из методов шаблона-предка, а после описать его в потомках?
WE>Что-то наподобие:
WE>WE>template <typename T>
WE>class base
WE>{
WE> ...
WE> virtual void some();
WE>};
WE>template <typename T>
WE>class sonA
WE>{
WE> ...
WE> virtual void some();
WE>};
WE>template <typename T>
WE>void sonA<T>::some()
WE>{
WE> ...
WE>}
WE>template <typename T>
WE>class sonB
WE>{
WE> ...
WE> virtual void some();
WE>};
WE>template <typename T>
WE>void sonB<T>::some()
WE>{
WE> ...
WE>}
WE>
То есть у Son'ов имеется в виду public-наследование от класса base!!! Sorry!!!
Здравствуйте, WebErr, Вы писали:
WE>Как реализовать?
WE>Можно ли оставить без реализации один из методов шаблона-предка, а после описать его в потомках?
WE>Что-то наподобие:
WE>WE>template <typename T>
WE>class base
WE>{
WE> ...
WE> virtual void some();
WE>};
WE>template <typename T>
WE>class sonA
WE>{
WE> ...
WE> virtual void some();
WE>};
WE>template <typename T>
WE>void sonA<T>::some()
WE>{
WE> ...
WE>}
WE>template <typename T>
WE>class sonB
WE>{
WE> ...
WE> virtual void some();
WE>};
WE>template <typename T>
WE>void sonB<T>::some()
WE>{
WE> ...
WE>}
WE>
Хоть вопрос и задан достаточно сбивчиво, но, я надеюсь, я правильно его понял.
В базовом классе функцию some в этом случае следуе объявить как чисто виртуальную и оставить ее без реализации:
template <typename T>
class base
{
virtual void some() = 0;
};
Здравствуйте, WebErr, Вы писали:
WE>Как реализовать?
WE>Можно ли оставить без реализации один из методов шаблона-предка, а после описать его в потомках?
Тоесть:
template <class T> class Base
{
public:
virtual bool fnTest() = 0;
};
template <class T> class Test : Base<T>
{
public:
virtual bool fnTest();
};
template <class T> bool Test<T>::fnTest()
{
return true;
}
или
template <class T> class Test
{
void fnTest();
};
void Test<int>::fnTest() {}
void Test<float>::fnTest() {}
void Test<MyClass1>::fnTest() {}
Здравствуйте, Sm0ke:
А разве можно писать внутри шаблона то же, что и в обычном классе.
Мне некоторые компиляторы не дают написать = 0 после описания метода в шаблоне.
Как впрочем и параметры по умолчанию объявить мне не удаётся.
Вот поэтому я и спрашиваю, а в каких компиляторах прокатит такая фишка, что
template <typename T>
class some
{
...
virtual void to_do() = 0;
};
А в каких выдаст ошибку компиляции на данной строке:
virtual void to_do() = 0;
Дело в том, что у меня нет возможности пользоваться MSVS.
Здравствуйте, WebErr, Вы писали:
WE>А разве можно писать внутри шаблона то же, что и в обычном классе.
WE>Мне некоторые компиляторы не дают написать = 0 после описания метода в шаблоне.
WE>Как впрочем и параметры по умолчанию объявить мне не удаётся.
Может быть, ты пытался написать шаблон функции?
template<class T>
class Foo
{
template<class V>
virtual void bar();
}
Так, разумеется, нельзя.
WE>Вот поэтому я и спрашиваю, а в каких компиляторах прокатит такая фишка,
WE>А в каких выдаст ошибку компиляции на данной строке:
WE>virtual void to_do() = 0;
WE>Дело в том, что у меня нет возможности пользоваться MSVS.
Проверь на том компиляторе, который есть у тебя.

Кстати, на каком?
Уж не борланд билдер ли? Или к тебя зоопарк из компиляторов?