template<>?
От: mic_o_stas NA
Дата: 23.12.01 14:26
Оценка:
Два вопросика по темплэйтам :
1. Как ( если это вообще возможно ) задать частичную специализацию?
Например:
template< class Arg, class Result >
class os_pointer_to_unary_function
{
...
Result operator( const Arg& a){ return prt(a);}
protected:
Result ( *ptr )( Arg );
};

В случае Arg или Result является void всё это не очень компилируется. Нельзя ли как-то написать специализации для
подобного вырождения, что то типа

template< void, class Result >
class os_pointer_to_unary_function
{
...
Result operator){ prt(a);}
protected:
Result ( *ptr )( );
};

2. Почему VC6 компилятор так считает
'identifier' : template parameter can never be initialized

There was an attempt to declare a structure or union argument to a template. The structure or union cannot be initialized. Use pointers to pass structures and unions as template parameters. The following code generates this error:

struct MyStruct {
int a;char b;
};
template <class T, struct MyStruct S> {}; // error
Stas
Re: template<>?
От: Sashko Россия http://www.dc.baika.ru/
Дата: 24.12.01 03:07
Оценка:
Здравствуйте mic_o_stas, Вы писали:

MOS>Два вопросика по темплэйтам :

MOS>1. Как ( если это вообще возможно ) задать частичную специализацию?

К сожалению VC++ 6.0 не поддерживает partial specialization, не могу точно сказать за 7.0. Специально хотел почитать доку к нему, из beta'ы, но не поставив его не прочитаешь, формат поменяли, поэтому забил. Но вроде в 7.0 с этим лучше не стало. Кто читал, или использовал 7.0, поделитесь.

А синтаксис class partial specialization нужно смотреть в 14.5.4

template<class T1, class T2, int I> class A             { };
template<class T, int I>            class A<T, T*, I>   { };
template<class T1, class T2, int I> class A<T1*, T2, I> { };
template<class T>                   class A<int, T*, 5> { };
template<class T1, class T2, int I> class A<T1, T2*, I> { };


Да, но VC++ 6.0 поддерживает полную специализацию, то есть возможна такая конструкция

template<> class A<int, long*, 5> { };
Re: template<>?
От: Андрей Россия  
Дата: 24.12.01 04:28
Оценка:
Здравствуйте mic_o_stas, Вы писали:

skip

Эта тема уже не раз обсасывалась на данном форуме, в том числе и конструкции типа void& (а точнее абсурдность таких описаний)
Re: template<>?
От: Юнусов Булат Россия  
Дата: 24.12.01 10:17
Оценка:
Здравствуйте mic_o_stas, Вы писали:

MOS>Два вопросика по темплэйтам :

MOS>1. Как ( если это вообще возможно ) задать частичную специализацию?
MOS>Например:
MOS>template< class Arg, class Result >
MOS>class os_pointer_to_unary_function
MOS>{
Сударь вы похоже (в благородной рассеяности) забыли пару скобок воткнуть
MOS> Result operator( const Arg& a){ return prt(a);}
MOS> protected:
MOS> Result ( *ptr )( Arg );
MOS>};

MOS>В случае Arg или Result является void всё это не очень компилируется.

unary_function с void в качестве аргумента — это как то само себе противоречит — по определению
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.