У меня есть два класса: DynamicCollection
и Dictionary
. Dictionary
наследует от DynamicCollection
и оба класса - это шаблоны. Выглядеть следующим образом:Проблема зависимости шаблона класса
template <typename ValueType>
class DynamicCollection;
template <typename KeyType, typename ValueType>
class Dictionary : public DynamicCollection<KeyValuePair<KeyType, ValueType>>;
Проблема у меня в том, что DynamicCollection
должен иметь метод GroupBy
, чье заявление выглядит следующим образом:
template <typename Selector>
Dictionary<Selector, ICollection<ValueType>*>* GroupBy(std::function<Selector(ValueType)> evaluator);
Так что проблема у меня есть и я не знаю, как переписать это, чтобы он работал. Я попытался вперед объявить Dictionary
в заголовке DynamicCollection
, а затем определить метод в заголовке Dictionary
, но потом я пришел в эту странную ситуацию:
template <typename Selector>
Dictionary<Selector, ICollection<ValueType>*>* DynamicCollection::GroupBy(std::function<Selector(ValueType)> evaluator);
, но, как вы можете догадаться, DynamicCollection
нужен шаблон список аргументов и ValueType
функционального объекта (а также ICollection
в обратном) должны быть ValueType
из декларации DynamicCollection
. Таким образом, это, очевидно, неправильный код, но я чувствую, что это будет что-то вроде этого (если я должен определить его в заголовке Dictionary
):
template <typename ValueType>
template <typename Selector>
Dictionary<Selector, ICollection<ValueType>*>* DynamicCollection<ValueType>::GroupBy(std::function<Selector(ValueType)> evaluator);
Потому что, когда я определяю это так:
template <typename ValueType, typename Selector>
Dictionary<Selector, ICollection<ValueType>*>* DynamicCollection<ValueType>::GroupBy(std::function<Selector(ValueType)> evaluator);
Я получаю ошибку о том, что не может найти декларацию соответствия (который рода имеет смысл для меня).
Так что мой вопрос: как я могу правильно определить этот метод?
Пробовал ли вы прокручивать классы шаблонов по мере необходимости? –