У меня есть шаблонный класс с методом шаблона внутри, который дает два шаблонных параметра T и U. Операция довольно дорогая и обнаруживается в профилировании как основное использование процессорного времени. Я мог бы несколько оптимизировать его, но только для случая, когда T == U (что довольно распространено), однако я не уверен в синтаксисе для этого ...
Рассматриваемый класс и метод выглядят так:
template<typename T>class Foo
{
public:
...
template<typename U>U bar()const;
};
Foo :: bar обычно вызывается из некоторого другого кода шаблона, поэтому, даже если я создал отдельный метод (например, "T fastBar () const"), я не знаю, как id будет вызывать другой код шаблона, который версия, где это возможно ...
Я пытался создать явную специализацию для T == U, но VC9 дал мне ошибки
template<typename T>template<>T Foo<T>::bar<T>()const
ошибка C2768: 'Foo :: bar': недопустимое использование явных аргументов шаблона