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

#c #templates #methods #function-templates #class-template

#c #шаблоны #методы #функция-шаблоны #класс-шаблон

Вопрос:

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

 // foo.h
template<typename A>
class foo {
    template<typename B>
    void boo(B);
};

// foo.cpp
template<typename A>
void foo<A>::boo(B value) {} // compiler error: 'Unknown' type name B

// or if I try this

template<typename B>
void foo<A>::boo(B value) {} // compiler error: Use of undeclared identifier A
  

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

Ответ №1:

Для определения шаблона-члена требуются оба набора параметров шаблона.

(выделение мое)

Если объявление заключающего класса, в свою очередь, является шаблоном класса, когда шаблон-член определяется вне тела класса, он принимает два набора параметров шаблона: один для заключающего класса, а другой для самого себя:

Например.

 template<typename A>
template<typename B>
void foo<A>::boo(B value) {} 
  

Комментарии:

1. @MAGEPAC Требуются два набора параметров шаблона; один для шаблона класса, другой для шаблона функции-члена. Один набор, содержащий два параметра шаблона, подобных <typename A, typename B> , не подходит для этого.

2. Ваш будет означать один шаблон с двумя параметрами шаблона, другой — вложенный шаблон.