приветствую!
название какое-то оно сумбурное получилось...
итак.
имеем такой класс:
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 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)