Re: Параметр шаблона как класс в другом неймспейсе
От: slavo  
Дата: 24.08.07 10:50
Оценка: 15 (1)
Всем спасибо, все понял!

так сделать не получится. Небольшой редизайн и все работает.
Re: Параметр шаблона как класс в другом неймспейсе
От: Erop Россия  
Дата: 24.08.07 10:50
Оценка: 3 (1)
Здравствуйте, slavo, Вы писали:

S>Как объявить параметр _Т, чтобы этой проблемы не возникало?

template<class T1, class T2> struct CClasses {
    typedef T1 TClass1;
    typedef T2 TClass2;
};

#define MAKE_NSPC_PAIR( className ) CClasses<Nmspc1::className, Nmspc2::className>

Ну и передаёшь в свой шаблон в качестве параметра MAKE_NSPC_PAIR( className )
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: Параметр шаблона как класс в другом неймспейсе
От: Аноним  
Дата: 24.08.07 10:11
Оценка: 2 (1)
А что ты хочешь сделать? _T — это не имя класса, это сам класс! Нельзя писать NFw::_T, нужно писать:

template<class _T>
class CPool: public _T
....


// using
CPool<NFw::A>


P.S. Имена, начинающиеся с подчеркивания зарезервированы для разработчиков компиляторов. Не стоит их использовать
Re: Параметр шаблона как класс в другом неймспейсе
От: hVostt Россия http://hvostt.ru
Дата: 24.08.07 10:25
Оценка: 2 (1)
Здравствуйте, slavo, Вы писали:

S>Есть такая задача:


S>    template<class _T>
S>    class CPool: public NFw::_T


...скип...

S>Как объявить параметр _Т, чтобы этой проблемы не возникало?


Это не правильно. Хоть темплейты являются заменой макросов, все же это не макросы. Вот с последними и надо шаманить. Правда я не могу придумать достойный способ, надоб пример по-полнее раскрыть..
... << RSDN@Home 1.2.0 alpha rev. 710>>
специализация — удел насекомых... (с) Р. Хайнлайн
Параметр шаблона как класс в другом неймспейсе
От: slavo  
Дата: 24.08.07 10:02
Оценка:
Есть такая задача:


    template<class _T>
    class CPool: public NFw::_T


на что компилятор говорит

error C2589: '<' : illegal token on right side of '::'


Как объявить параметр _Т, чтобы этой проблемы не возникало?
Re[2]: Параметр шаблона как класс в другом неймспейсе
От: Smal Россия  
Дата: 24.08.07 10:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А>P.S. Имена, начинающиеся с подчеркивания зарезервированы для разработчиков компиляторов. Не стоит их использовать

Только те, в которых после подчеркивания идет заглавная буква или еще одно подчеркивание.
С уважением, Александр
Re[2]: Параметр шаблона как класс в другом неймспейсе
От: slavo  
Дата: 24.08.07 10:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А что ты хочешь сделать? _T — это не имя класса, это сам класс! Нельзя писать NFw::_T, нужно писать:


А>
А>template<class _T>
А>class CPool: public _T
А>....


А>// using
А>CPool<NFw::A>
А>


А>P.S. Имена, начинающиеся с подчеркивания зарезервированы для разработчиков компиляторов. Не стоит их использовать


Дело в том, что в текущем неймспейсе (не NFw тоже есть класс с таким же именем, котороя я пытаюсь передать через параметр). По моему замыслу _Т должен обозначать и N1::Class и N2::Class


template<class _T>
class CPool: public N1::_T
{
  // а в других местах шаблона как-будто N2::_T
Re[3]: Параметр шаблона как класс в другом неймспейсе
От: Аноним  
Дата: 24.08.07 10:52
Оценка:
Здравствуйте, slavo, Вы писали:

S>Дело в том, что в текущем неймспейсе (не NFw тоже есть класс с таким же именем, котороя я пытаюсь передать через параметр). По моему замыслу _Т должен обозначать и N1::Class и N2::Class

S>
S>template<class _T>
S>class CPool: public N1::_T
S>{
S>  // а в других местах шаблона как-будто N2::_T
S>

Ну что же, пошаманим.
Итак делаем N1 и N2 классами, а не неймспейсами
class N1
{
public:
 class A
 {..};
};

template<class N>// обращаю внимание, сюда передаем типа неймспейс, а не класс
class CPool: public N::A
{
...
};
Re[4]: Параметр шаблона как класс в другом неймспейсе
От: VoidEx  
Дата: 24.08.07 10:59
Оценка:
Здравствуйте, Аноним, Вы писали:

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


S>>Дело в том, что в текущем неймспейсе (не NFw тоже есть класс с таким же именем, котороя я пытаюсь передать через параметр). По моему замыслу _Т должен обозначать и N1::Class и N2::Class

S>>
S>>template<class _T>
S>>class CPool: public N1::_T
S>>{
S>>  // а в других местах шаблона как-будто N2::_T
S>>

А>Ну что же, пошаманим.
А>Итак делаем N1 и N2 классами, а не неймспейсами
А>
А>class N1
А>{
А>public:
А> class A
А> {..};
А>};

А>template<class N>// обращаю внимание, сюда передаем типа неймспейс, а не класс
А>class CPool: public N::A
А>{
А>...
А>};
А>

Перечитай исходный код и свой
Re[2]: Параметр шаблона как класс в другом неймспейсе
От: Erop Россия  
Дата: 24.08.07 11:49
Оценка:
Здравствуйте, slavo, Вы писали:

S>Небольшой редизайн и все работает.


Обычно это самый удачный выход и есть!!!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.