Явная реализация шаблона при передаче аргумента по ссылке - PullRequest
1 голос
/ 25 марта 2020

Как я могу явно создать экземпляр функции-шаблона с аргументом, переданным по ссылке?

У меня есть простая шаблонная функция, которая принимает любой тип и превращает его в строку:

template <typename T>
string to_string (const T &e) {
    std::stringstream ss;
    string str;
    ss << e;
    ss >> str;
    return str;
}

Обратите внимание, что параметр аргумента e передается по ссылке.

Теперь я хочу явно создать экземпляр функции для разных типов данных, например:

template string to_string<string> (string);
template string to_string<double> (double);

Однако, компилятор жалуется (из-за явного создания экземпляра):

ошибка: явное создание экземпляра to_string не относится к шаблону функции, шаблону переменной, функции-члену, классу-члену или состоянию c элемент данных

шаблон строки to_string (string);

Если я изменю аргумент шаблонной функции с const T &e на const T e - то есть удаление ссылка - она ​​компилируется и работает нормально.

Как можно явно создать экземпляр функции-шаблона с аргументом, переданным по ссылке?

Toolchain :

  • C ++ 14
  • clang версия 11.0.0 (MacOS)

1 Ответ

5 голосов
/ 25 марта 2020

Вы должны также указать параметры как ссылку в явном экземпляре. В противном случае они не будут соответствовать сигнатуре шаблона функции. Например, если T равно double, то тип параметра const T& должен быть const double&.

template string to_string<string> (const string&);
template string to_string<double> (const double&);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...