У меня есть класс MyClass, который настроен на имя типа T. Но внутри я хочу метод, который основан на шаблоне другого типа TT (который не связан с T).
После чтения / обработки я нашелследующие обозначения:
template <typename T>
class MyClass
{
public :
template<typename TT>
void MyMethod(const TT & param) ;
} ;
По стилистическим соображениям (я хочу, чтобы мое шаблонное объявление класса было в одном заголовочном файле, а определения методов - в другом заголовочном файле), я не буду определять метод внутри классадекларация.Итак, я должен написать это как:
template <typename T> // this is the type of the class
template <typename TT> // this is the type of the method
void MyClass<T>::MyMethod(const TT & param)
{
// etc.
}
Я знал, что должен «объявить» имена типов, используемые в методе, но не знал, как именно, и нашел путем проб и ошибок.
Приведенный выше код компилируется в Visual C ++ 2008, но: Является ли это правильным способом, чтобы метод, заданный шаблоном для TT, находился внутри класса, заданного для T?
Как бонусЕсть ли скрытые проблемы / сюрпризы / ограничения за этот вид кода?(Я полагаю, что специализации могут быть довольно забавными, чтобы писать)