шаблон в шаблоне, и реализация вне шаблона
От: niXman Ниоткуда https://github.com/niXman
Дата: 14.11.13 15:41
Оценка:
приветствую!

название какое-то оно сумбурное получилось...

итак.
имеем такой класс:
template<typename T>
struct type {
    struct impl;

    type();
    ~type();

    void m();

private:
    impl *pimpl;
};

для него, чтоб привести реализацию вне класса но в той же единице трансляции, делаем такое:
// пустышка. только компиляции ради.
template<typename T>
struct type<T>::impl {};

// реализация конструктора/деструктора/m()
template<typename T>
type<T>::type()
    :pimpl(new type<T>::impl)
{}

template<typename T>
type<T>::~type()
{ delete pimpl; }

template<typename T>
void type<T>::m()
{std::cout << "ping!" << std::endl;}


тут все понятно.

проблема в том, что класс 'type::impl' должен так же быть шаблоном.
таким образом, мы имеет это:
template<typename T>
struct type {
    template<typename>
    struct impl;

    type();
    ~type();

    void m();

private:
    impl<T> *pimpl;
};


все, на этом мои мысли закончились настолько, что никак не могу понять, каким в этом случае должно быть это выражение?:
template<typename T>
struct type<T>::impl {};



благодарен.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.