Тип объекта, на который действует Class2::doSomething
, не должен быть частью типа Class2
.Так что сделайте Class2::doSomething()
a Шаблон функции-члена :
template < class T >
class Class2{
public:
...
template<class S> Class2<T> * doSomething(Class1<S> * );
...
private:
...
};
РЕДАКТИРОВАТЬ:
Определение шаблона функции-члена достаточно просто, если вы это сделаетеон встроенный, но иногда вы не можете или не хотите этого делать, и тут появляется какой-то прикольный синтаксис.Вот полный пример, который иллюстрирует, как определить шаблон функции-члена, и как его вызвать.Я изменил названия, чтобы их было легче читать и следовать.
template<class FooType> class Foo
{
};
template<class BarType> class Bar
{
public:
template<class FooType> Bar<BarType>* doSomething(Foo<FooType>* foo);
};
template<typename BarType> template<typename FooType> Bar<BarType>* Bar<BarType>::doSomething(Foo<FooType>* foo)
{
return 0;
}
int main()
{
Foo<unsigned> foo_1;
Bar<double> bar_1;
Bar<double> * bar_copy = 0;
bar_copy = bar_1.doSomething<unsigned>(&foo_1);
return 0;
}