Создание экземпляра функции-члена шаблона - PullRequest
0 голосов
/ 30 марта 2020

У меня есть функции-члены шаблона, но я не могу понять, как их можно создать, когда я их правильно использую. Структура выглядит следующим образом:

// foo.h
class Foo {
template<typename T>
T Func(T);
}
#include "foo.tpp"
// foo.tpp
template<typename T>
T Func(T input) {return(input);}

Как создать экземпляр шаблона, если я хочу реализовать следующий код в основной функции?

//main.cpp
#include "foo.h"
int main()
{
    Foo obj;
    int int_input, int_output;
    int_output = obj.Func(int_input);
    double double_input, double_output;
    double_output = obj.Func(double_input);
    return 0;
}

Я проверил ответы для похожих вопросов, таких как Создание экземпляра функции-члена шаблона , но я не хочу создавать экземпляры всех функций-членов для всех комбинаций каждый раз, когда я их использую. Другим вариантом может быть определение класса как класса шаблона и создание экземпляров различных классов с помощью template class Foo<int>;. Однако это вынуждает меня определять разные классы для разных типов функций-членов, что я не предпочитаю. Есть ли другое решение? Большое спасибо!

1 Ответ

0 голосов
/ 30 марта 2020
template<typename T>
T Func(T input) {return(input);}

Это объявляет автономный шаблон функции в глобальной области видимости, который не связан с вашим классом Foo. Чтобы реализовать функцию-член, вам необходимо добавить к имени определения функции Foo::, как и для любой другой реализации функции-члена.

template<typename T>
T Foo::Func(T input){ return input; }

Также обратите внимание, что return(value); вместо return value; это небольшой анти-шаблон. Хотя обычно это не имеет значения, это может иметь значение при использовании таких вещей, как decltype(auto) предполагаемый тип возврата, и может привести к случайному зависанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...