Re[3]: Шаблоны шаблонов
От: korzhik Россия  
Дата: 22.03.05 14:55
Оценка: :)
Здравствуйте, Chez, Вы писали:

C>В общем, задача такая:

C>есть куча классов объявленных так:
C>
C>template<int*>
C>class A1{};
C>template<double*>
C>class A2{}; // и т.д.
C>

C>Нужно написать шаблонный класс-дискриминатор который определял бы тип указателя в шаблоне соотв. A-класса. Т.е.
C>
C>typedef DesiredClass<A1>::Type A1_pT; // == int*
C>typedef DesiredClass<A2>::Type A2_pT; // == double*
C>


C>Так можно сделать?


Вот такое решение на грани возможностей современных компиляторов C++ подойдёт?
template<int*>
struct A1
{
  typedef int type;  
};

template<double*>
struct A2
{
  typedef double type;  
};

template<class T>
struct MetaProgrammingForeverClass
{
  typedef typename T::type type;
};
Ответ на сообщение, которое вы удалили :)
От: Chez Россия  
Дата: 22.03.05 15:25
Оценка: :)
L_L> <skipped>
вместо того чтоб подшучивать лучше помогли чем... я TYPE_OF() изобретаю до сих пор... вот поэтому у меня и вопросы корявые.

Кстати, на 50% уже сделал, но почему то никто не обратил внимания, здесь
Автор: Chez
Дата: 10.02.05
.

Chez, ICQ#161095094

Posted via:RSDN@Home;version:1.1.3;muzikstamp:Tenhi — Tenhi

Re[4]: Ответ на сообщение, которое вы удалили :)
От: Lorenzo_LAMAS  
Дата: 23.03.05 11:58
Оценка: +1
K>понятно.
K>Одно не понимаю что мешало добавить typeof в стандарт в 98 году
K>Делов то: взять реализацию sizeof и немножко изменить.
K>Минусов от внедрения typeof не вижу, однако не приняли почему то

(ИМХО)
Да, но наверняка тогда и плюсы от его добавления не были так уж очевидны.
Of course, the code must be complete enough to compile and link.
Шаблоны шаблонов
От: Chez Россия  
Дата: 22.03.05 14:27
Оценка:
Как известно, такая конструкция нормально компилится в VC7:

template<template<typename P> class T>
class A
{
};
А можно ли добиться, чтобы шаблон A параметризовалося шаблонным классом, параметризуемым указателем?
Т.е. что-то вроде
template<template<typename P> template<P*> class T> // это не компилится
class A
{
};

Чтобы можно было в A передавать шаблон типа
template<int* P>
class T
{
};
typedef A<T> _AT;

Chez, ICQ#161095094

Posted via:RSDN@Home;version:1.1.3;muzikstamp:Tenhi — Huomen — Morrow

Re: Шаблоны шаблонов
От: Lorenzo_LAMAS  
Дата: 22.03.05 14:36
Оценка:
Чего то ты всего намесил в кучу. Если у тебя класс template<int *> class A; то он никак не может быть аргументом для
< template<class>class PARAM > Почему бы тебе явно не написать template<class T, template<T *>class T1> clas lalala{}; ??
Of course, the code must be complete enough to compile and link.
Re: Шаблоны шаблонов
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 22.03.05 14:40
Оценка:
Здравствуйте, Chez, Вы писали:

C>
C>template<template <typename P> template<P*> class T> // Это чего такое :)
C>class A
C>{
C>};
C>


Обычный вид Template Template Parameters такой
template <template <class W> typename T>
class A
{
};


Причем если W не участвует в описании/определении класса A, то этот символ (в терминах компилятора/линкера) можно опустить — это просто формальный параметр.
А так — частичная специализация в помошь.
HgLab: Mercurial Server and Repository Management for Windows
Re[2]: Шаблоны шаблонов
От: Chez Россия  
Дата: 22.03.05 14:50
Оценка:
L_L>Почему бы тебе явно не написать template<class T, template<T *>class T1> clas lalala{}; ??
не пойдёт.

В общем, задача такая:
есть куча классов объявленных так:
template<int*>
class A1{};
template<double*>
class A2{}; // и т.д.

Нужно написать шаблонный класс-дискриминатор который определял бы тип указателя в шаблоне соотв. A-класса. Т.е.
typedef DesiredClass<A1>::Type A1_pT; // == int*
typedef DesiredClass<A2>::Type A2_pT; // == double*


Так можно сделать?

Chez, ICQ#161095094

Posted via:RSDN@Home;version:1.1.3;muzikstamp:Tenhi — Vastkaiun

Re[4]: Шаблоны шаблонов
От: Chez Россия  
Дата: 22.03.05 15:04
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Вот такое решение на грани возможностей современных компиляторов C++ подойдёт?

Рано смеётесь. Не подойдёт.
Классы A1, A2... не могут иметь реализации, только объявление.

Вот такое требование.

Chez, ICQ#161095094

Posted via:RSDN@Home;version:1.1.3;muzikstamp:Tenhi — Vilja

Re[4]: Шаблоны шаблонов
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 22.03.05 15:06
Оценка:
Здравствуйте, korzhik, Вы писали:

K>
K>template<int*>
K>struct A1
K>{
K>  typedef int type;  
K>};

K>template<double*>
K>struct A2
K>{
K>  typedef double type;  
K>};

K>template<class T>
K>struct MetaProgrammingForeverClass
K>{
K>  typedef typename T::type type;
K>};
K>


Только вот наверное проблематично будет потом избавиться от этой звездочки — то бишь где-нибудь да понадобится stripped type

template <typename T>
struct TypeStripper
{
    typedef typename T type;
};

template <typename T>
struct TypeStripper<T*>
{
    typedef typename T type;
};

//
// И в итоге получаем:
template <typename T>
struct MetaProgrammingForeverClass
{
    typedef T::type type;
    typedef TypeStripper<T::type>::type stripped_type;
};
HgLab: Mercurial Server and Repository Management for Windows
Re: Ответ на сообщение, которое вы удалили :)
От: korzhik Россия  
Дата: 22.03.05 20:04
Оценка:
Здравствуйте, Chez, Вы писали:

L_L>> <skipped>

C>вместо того чтоб подшучивать лучше помогли чем...
не хотел обидеть

>я TYPE_OF() изобретаю до сих пор... вот поэтому у меня и вопросы корявые.

желаю удачи

C>Кстати, на 50% уже сделал, но почему то никто не обратил внимания, здесь
Автор: Chez
Дата: 10.02.05
.

typeof должен быть на уровне core language, иначе это представляет только теоретический интерес IMхO (я имею ввиду навароты с шаблонами)
Re: Ответ на сообщение, которое вы удалили :)
От: Lorenzo_LAMAS  
Дата: 23.03.05 09:01
Оценка:
L_L>> <skipped>
C>вместо того чтоб подшучивать лучше помогли чем... я TYPE_OF() изобретаю до сих пор... вот поэтому у меня и вопросы корявые.

Я его потому и удалил, что счел неуместным. Так как оно удалено уже, извиняться за него не стану А вообще вместо изобретения TYPE_OF займись написанием своего компилятора Или модификацией существующего — например GCC, исходники которого доступны и в котором, к тому же, есть typeof.
Of course, the code must be complete enough to compile and link.
Re[2]: Ответ на сообщение, которое вы удалили :)
От: Chez Россия  
Дата: 23.03.05 10:05
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>>> <skipped>

C>>вместо того чтоб подшучивать лучше помогли чем... я TYPE_OF() изобретаю до сих пор... вот поэтому у меня и вопросы корявые.

L_L>Я его потому и удалил, что счел неуместным. Так как оно удалено уже, извиняться за него не стану А вообще вместо изобретения TYPE_OF займись написанием своего компилятора Или модификацией существующего — например GCC, исходники которого доступны и в котором, к тому же, есть typeof.

Пожалуй для меня это слишком сложная задача
Я надеюсь что выйдет новый стандарт C++, который включит в себя множество полезных фич.

Chez, ICQ#161095094

Posted via:RSDN@Home;version:1.1.3;muzikstamp:Tenhi — Souto — Drift

Re[2]: Ответ на сообщение, которое вы удалили :)
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 23.03.05 11:03
Оценка:
Здравствуйте, korzhik, Вы писали:

C>>Кстати, на 50% уже сделал, но почему то никто не обратил внимания, здесь
Автор: Chez
Дата: 10.02.05
.

K>typeof должен быть на уровне core language, иначе это представляет только теоретический интерес IMхO (я имею ввиду навароты с шаблонами)

Но некоторым, всем нам известным, людям не терпится уже сейчас преимущества тайпофа использовать
http://lists.boost.org/MailArchives/boost/msg64150.php
Re[3]: Ответ на сообщение, которое вы удалили :)
От: korzhik Россия  
Дата: 23.03.05 11:37
Оценка:
Здравствуйте, alnsn, Вы писали:

A>Здравствуйте, korzhik, Вы писали:


C>>>Кстати, на 50% уже сделал, но почему то никто не обратил внимания, здесь
Автор: Chez
Дата: 10.02.05
.

K>>typeof должен быть на уровне core language, иначе это представляет только теоретический интерес IMхO (я имею ввиду навароты с шаблонами)

A>Но некоторым, всем нам известным, людям не терпится уже сейчас преимущества тайпофа использовать

A>http://lists.boost.org/MailArchives/boost/msg64150.php

понятно.
Одно не понимаю что мешало добавить typeof в стандарт в 98 году
Делов то: взять реализацию sizeof и немножко изменить.
Минусов от внедрения typeof не вижу, однако не приняли почему то
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.