namespace HP
{
template<class T> class Autorelease
{
public:
template<class T2> explicit Autorelease(const T2 &);
~Autorelease();
private:
Autorelease(const Autorelease<T> &);
Autorelease<T>& operator=(const Autorelease<T> &);
};
}
Определение шаблонного преобразующего конструктора вне шаблонного класса
У меня не получается определит шаблонный преобразующий конструктор вне шаблонного класса.
Объявление класса:
Код:
Я пробовал разные варианты определения преобразующего конструктора и в том числе следующие:
1)
Код:
template<class T, class T2> HP::Autorelease<T>::Autorelease(const T2 &)
{
//...
}
{
//...
}
При этом компилятор выдавал ошибку
error C2244: 'HP::Autorelease<T>::Autorelease<T>::Autorelease<T>' : unable to resolve function overload.
Код:
2)
template<class T, class T2> HP::Autorelease<T>::Autorelease<T2>(const T2 &)
{
//...
}
template<class T, class T2> HP::Autorelease<T>::Autorelease<T2>(const T2 &)
{
//...
}
Ошибка
error C2143: syntax error : missing ';' before '<'.
Компилятор: MS VC 6.0.
Код:
template <class T> template <class X> void __fastcall TClass<T>::Method (const X &Param)
{
//...
}
{
//...
}
Вызывается просто
Код:
Object.Method (ParamX);
В зависимости от типа параметра, формируется конкретная реализация кода метода класса.
Среда Borland C++ Builder 6, но и для других должно подойти
Поробовал на работе на gcc - все ОК.
Спасибо за помощь!