C ++ Явная реализация шаблонной функции для шаблонного класса другого типа - PullRequest
4 голосов
/ 29 ноября 2011

Я пытаюсь явно создать экземпляр шаблонной функции типа U внутри шаблонного класса типа T. Мой код ниже генерирует предупреждение, и компоновщик не находит явное создание экземпляра ReinterpretAs(). Может кто-нибудь заметить ошибку или посоветовать, как это сделать? Я использую VC ++ 2010.

template<typename T> 
class Matrix
{
  public:
    template<typename U> Matrix<U> ReinterpretAs() const;
};

template<typename T>
template<typename U>
Matrix<U> Matrix<T>::ReinterpretAs() const
{
   Matrix<U> m;
   // ...
   return m;
}


// Explicit instantiation.
template class Matrix<int>;
template class Matrix<float>;

template Matrix<float>  Matrix<int>::ReinterpretAs<float>();
template Matrix<int>    Matrix<float>::ReinterpretAs<int>();

Последние две строки выше дают предупреждение компилятору:

warning #536: no instance of function template "Matrix<T>::ReinterpretAs 
[with T=float]" matches the specified type

Заранее спасибо, Марк

1 Ответ

9 голосов
/ 29 ноября 2011

Вам не хватает const.

template class Matrix<int>;
template class Matrix<float>;

template Matrix<float>  Matrix<int>::ReinterpretAs<float>() const;
template Matrix<int>    Matrix<float>::ReinterpretAs<int>() const;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...