Опубликовано в другом вопросе:
template <class T>
struct foo : T {
void bar() {
x = 5; // doesn't work
this->x = 5; // works - T has a member named x
}
};
Без this->
Компилятор не знает x
является (унаследованным) членом.
Аналогично использованию typename
иtemplate
внутри кода шаблона:
template <class T, class S>
struct foo : T {
typedef T::ttype<S>; // doesn't work
typedef typename T::template ttype<S> footype; // works
};
Это глупо и несколько ненужно, но вы все равно должны это сделать.