C ++ - Отдельное объявление / определение для шаблонной функции в шаблонном классе
Мне известно, что синтаксис объявления метода класса шаблона в заголовке и определения его в исходном файле выглядит так:
myclass.h
template
class MyClass {
public:
void method(T input);
private:
T privVar;
};
myclass.cpp
template
void MyClass::method(T input) {
privVar = input;
}
Но что, если метод также является шаблоном? Я добавляю методы кbasic_string
класс, и я хочу знать, как написать реализацию для функций.
MyString.h
template
class String
: public std::basic_string {
private:
// Types for the conversion operators.
typedef _Elem* _StrTy;
typedef const _Elem* _ConstStrTy;
//...
public:
// Conversion operators so 'String' can easily be
// assigned to a C-String without calling 'c_str()'.
operator _StrTy() const {
return const_cast(this->c_str());
}
operator _ConstStrTy() const {
return this->c_str();
}
// ... Constructors ...
/*------------ Additional Methods ------------*/
//! Converts a value of the given type to a string.
template static String ConvertFrom(_ValTy val);
//! Converts a string to the given type.
template static _ValTy ConvertTo(const String& str);
template _ValTy ConvertTo(void) const;
//! Checks if a string is empty or is whitespace.
static bool IsNullOrSpace(const String& str);
bool IsNullOrSpace(void) const;
//! Converts a string to all upper-case.
static String ToUpper(String str);
void ToUpper(void);
// ...
};
Как я мог реализоватьtemplate static String ConvertFrom(_ValTy val);
? Потому что теперь мне нужно указать не только шаблон класса, но и шаблон функции. Я держу пари, что кодя собираюсь написать неЭто верно, но оно должно показать, чего я пытаюсь достичь:
MyString.cpp
template
template
String String::ConvertFrom(_ValTy val) {
// Convert value to String and return it...
}
Я не продвинутый вообще с шаблонами. Мало того, что я очень сомневаюсь в том, что вышеприведенное действительно, оно кажется громоздким и не очень читабельным. Как мне реализовать методы шаблона и методы статического шаблона, которые возвращают свой собственный тип класса? Потому что я неЯ не хочу определять их в заголовке.