Предварительное объявление функции-члена класса шаблона - PullRequest
0 голосов
/ 24 апреля 2019

Это предварительное объявление Mappings класса:

template<typename Type, typename IDType=typename Type::IDType>
class Mappings;

template<typename Type, typename IDType>
class Mappings
{
public:
    ...
    Type valueFor(const IDType& id);
    ...
};

Как переслать объявление функции valueFor?

Мне нужно что-то вроде

template<typename Type, typename IDType>
Type Mappings::valueFor(const IDType& id)
{
    // return value 
}

1 Ответ

3 голосов
/ 24 апреля 2019

Как уже указывалось в комментариях выше, невозможно переслать объявление только одной функции-члена класса.Если то, что вы на самом деле ищете, это способ определения вашей функции-члена вне класса:

template <typename Type, typename IDType = typename Type::IDType>
class Mappings;

template <typename Type, typename IDType>
class Mappings
{
public:
    Type valueFor(const IDType& id);
};

template <typename Type, typename IDType>
Type Mappings<Type, IDType>::valueFor(const IDType& id)
{
    return {};
}

живой пример здесь

Обратите внимание, что имя классаперед :: необходимо включить аргументы шаблона.В определении функции-члена вне определения класса имя должно содержать имя класса [class.mfct] / 4 , за которым следует ::.Mappings - это имя шаблона класса, а не имя класса.Хотя внутри определения шаблона класса имя шаблона может использоваться как синоним имени класса [temp.local] / 1 , мы не находимся внутри определения какого-либо шаблона вТочка, где вводится определение этой функции-члена.Таким образом, вам нужно использовать правильное имя класса там ...

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