Ну и ну
Сегодня наткнулся очень интересное решение, связанное с использованием методов-шаблонов :-)
Пусть у нас есть класс с методом-шаблоном foo:
И мы хотим использовать этот метод в другом шаблоне (ну например шаблоне-функции) следующим образом:
Получаем ошибку на
Некоторое время назад, столкнувшись с такой ситуацией, я решил, что это связано с неопределённостью реального типа a или чем-то подобным. В тот раз я использовал I used a->A::foo() как workaround.
Сегодня коллега спросил меня про "а как это сделать", я подумал, погуглил, и нашёл вот такой выход:
Весьма впечатляющая конструкция :-) Интересно, это "фича" g++ или в стандарте такое тоже допускается? (лень смотреть, если честно, вдруг кто знает :-)).
Пусть у нас есть класс с методом-шаблоном foo:
class A
{
public:
template<class T>
int foo();
};
template<> int A::foo<int>()
{
return 1;
};
И мы хотим использовать этот метод в другом шаблоне (ну например шаблоне-функции) следующим образом:
template<typename T>
T bar()
{
A a;
return a->foo<T>();
}
Получаем ошибку на
a->foo<T>().Некоторое время назад, столкнувшись с такой ситуацией, я решил, что это связано с неопределённостью реального типа a или чем-то подобным. В тот раз я использовал I used a->A::foo
Сегодня коллега спросил меня про "а как это сделать", я подумал, погуглил, и нашёл вот такой выход:
template<typename T>
T bar()
{
A a;
return a->template foo<T>();
}
Весьма впечатляющая конструкция :-) Интересно, это "фича" g++ или в стандарте такое тоже допускается? (лень смотреть, если честно, вдруг кто знает :-)).
