У меня есть такой код:
template <class T>
class MyClass {
public:
template <class U>
void foo() {
U a;
a.invoke();
}
};
Я хочу это в такой форме:
template <class T>
class MyClass {
public:
template <class U>
void foo();
};
template <class T> /* ????? */
void MyClass<T>::foo() {
U a;
a.invoke();
}
Как я могу это сделать? Каков правильный синтаксис?
Почему бы просто не сделать функцию decl внутри класса decl (см. Codepad.org/wxaZOMYW )? В любом случае вы не можете переместить функцию decl из заголовка, поэтому ...
—
hiobs
@hiobs: FWIW, вы можете переместить объявление в файл CPP. Тем не менее, я сделал это только один раз, чтобы заняться хакерством. В этом случае важно знать, как это сделать.
—
Томас Эдинг
Иногда необходимо переместить определение функции за пределы класса после определения зависимостей, необходимых для тела функции. Это происходит, когда класс A использует класс B, а B также использует A. В этом случае вы объявляете A и B, а затем определяете методы A и B.
—
Wheezil