Добрый день.
Можно ли сделать сабжевую вещь?
Чуть подробнее:
Имеется шаблон класса, в котором необходимо сделать вызов функции члена другого класса по указателю. Тип другого класса и тип функции-члена этого класса задается параметрами шаблона, а затем передается в конструктор инстанцированного шаблона.
Но чаще всего этой функцией "другого класса" будет некая функция этого же инстанцированного шаблона. Хотелось бы, по сему, сделать параметром по умолчания для аргумента "класс функции" получаемый после инстанцирования этого шаблона класс... ну и какую-нибудь функцию этого класса.
Возможно ли?
Заранее благодарю за помощь.
Бред какой-то. Ты что, хочешь что-то вроде такого?
template<class T = Test>
class Test??????!!!!!!
Здравствуйте, Аноним, Вы писали:
А>Бред какой-то. Ты что, хочешь что-то вроде такого?
А>А>template<class T = Test>
А>class Test??????!!!!!!
А>
Именно. Используется ссылка на класс. Почему бы и нет? Только вот как это записать, если ссылка может быть не только на этот же класс...?
Здравствуйте, 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++" Александреску — там не только функторы есть)