Пишу шаблонный класс, в котором реализация одного из методов должна быть одинаковая для всех случаев, кроме одного — когда в качестве параметра передается экземпляр данного шаблонного класса.
template <class X> class TMy
{
public:
...
void push(X value);
};
void test()
{
TMy<int> q;
q.push( 5 ); //1
TMy<TMy<double> > w;
w.push( TMy<double> (5.5) ); //2
TMy<TMy<int> > e;
e.push( TMy<int> (5) ); //3
//1 и 2 должны быть вызваны разные методы, 2 и 3 - одинаковые
}
Смог выполнить задуманное сделав частичную специализацию класса
Но понадобилось переопределять все методы класса. Можно ли задать частичную специализацию метода шаблонного класса(если вопрос слегка корявый, то его суть — неохота переопределять все методы класса для данной специализации)?
C>Но понадобилось переопределять все методы класса. Можно ли задать частичную специализацию метода шаблонного класса(если вопрос слегка корявый, то его суть — неохота переопределять все методы класса для данной специализации)?
Выдели все методы с общей реализацией в базовый класс, от которого унаследуй основной шаблон и частичную специализацию.
Здравствуйте, caxaromires, Вы писали:
C>Пишу шаблонный класс, в котором реализация одного из методов должна быть одинаковая для всех случаев, кроме одного — когда в качестве параметра передается экземпляр данного шаблонного класса.
C>Но понадобилось переопределять все методы класса. Можно ли задать частичную специализацию метода шаблонного класса(если вопрос слегка корявый, то его суть — неохота переопределять все методы класса для данной специализации)?
Здравствуйте, caxaromires, Вы писали:
C>Пишу шаблонный класс, в котором реализация одного из методов должна быть одинаковая для всех случаев, кроме одного — когда в качестве параметра передается экземпляр данного шаблонного класса. C>
C>template <class X> class TMy
C>{
C>public:
C>...
C>void push(X value);
C>};
C>void test()
C>{
C>TMy<int> q;
C>q.push( 5 ); //1
C>TMy<TMy<double> > w;
C>w.push( TMy<double> (5.5) ); //2
C>TMy<TMy<int> > e;
C>e.push( TMy<int> (5) ); //3
C>//1 и 2 должны быть вызваны разные методы, 2 и 3 - одинаковые
C>}
C>
C>Смог выполнить задуманное сделав частичную специализацию класса C>
C>Но понадобилось переопределять все методы класса. Можно ли задать частичную специализацию метода шаблонного класса(если вопрос слегка корявый, то его суть — неохота переопределять все методы класса для данной специализации)?
Здравствуйте, Centaur, Вы писали:
C>Код неэквивалентный. В исходном варианте у TMy<X> был только void push(X), а тут появляется void push(TMy<A>) для любых A.
C>Всем устраивает!) Можно уточнить зачем делать закрытыми push_impl вместо того, чтобы сразу сделать их открытыми?
А что тогда в аргумент шаблона передавать?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]