Параметр шаблона класса - тот же инстанцированный шаблон
От: Vasilisk  
Дата: 29.01.03 13:21
Оценка:
Добрый день.

Можно ли сделать сабжевую вещь?
Чуть подробнее:
Имеется шаблон класса, в котором необходимо сделать вызов функции члена другого класса по указателю. Тип другого класса и тип функции-члена этого класса задается параметрами шаблона, а затем передается в конструктор инстанцированного шаблона.
Но чаще всего этой функцией "другого класса" будет некая функция этого же инстанцированного шаблона. Хотелось бы, по сему, сделать параметром по умолчания для аргумента "класс функции" получаемый после инстанцирования этого шаблона класс... ну и какую-нибудь функцию этого класса.
Возможно ли?

Заранее благодарю за помощь.
Re: Параметр шаблона класса - тот же инстанцированный шаблон
От: Аноним  
Дата: 29.01.03 15:14
Оценка:
Бред какой-то. Ты что, хочешь что-то вроде такого?
template<class T = Test>
class Test??????!!!!!!
Re[2]: Параметр шаблона класса - тот же инстанцированный шаб
От: Vasilisk  
Дата: 29.01.03 15:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Бред какой-то. Ты что, хочешь что-то вроде такого?

А>
А>template<class T = Test>
А>class Test??????!!!!!!
А>


Именно. Используется ссылка на класс. Почему бы и нет? Только вот как это записать, если ссылка может быть не только на этот же класс...?
Re: Параметр шаблона класса - тот же инстанцированный шаблон
От: TepMuHyc  
Дата: 29.01.03 21:48
Оценка:
Здравствуйте, Vasilisk, Вы писали:

V>Возможно ли?

Увы — нет. Получится рекурсивное определение.

А реализовать это дело можнео при помощи обобщенных функторов.
В теле шаблона определяешь переменную-функтор, а в конструкторе (или где-то еще)
указываешь что этот функтор будет вызывать.

что-то типа этого:
class Test {
   functor<void,int,string> m_functor;
public:
   void MemberToCall(int, string)
   {
      //do something horrible here
   }

   Test()
      :m_functor(this, &Test::MemberToCall) //функтор завязан на функцию-член MemberToCall
   {
   }

   template<typename ClassPtr, typename MemFun>
   Test(cosnt ClassPtr& ptr, MemFun mfun)
      :m_functor(ptr, mfun) //функтор завязан на произвольную фцию-член
   {
   }
};


Что касается реализации этих самых функторов, то мне известны две:
— в библиотеке boost http://www.boost.org/libs/function/index.html
— в библиотеке Loki http://sourceforge.net/projects/loki-lib/
(эта библиотека является иллистрацией к книге "Современное проектирование на C++" Александреску — там не только функторы есть)
____________________
God obviously didn't debug, hasn't done any maintenance, and no documentation can be found. Truly amateur work.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.