Вам просто нужно адаптировать связанное решение, чтобы оно работало на ваше. Ваша попытка (из комментариев) не совсем верна. При использовании enable_if
с параметрами шаблона, он должен быть последним параметром и должен появляться только один раз. Таким образом, изменив то, что вы сделали, чтобы переместить V
перед enable_if
, и изменив enable_if
на &&
, вы получите:
template<typename K, typename V, typename std::enable_if<std::is_base_of<ClassA, K>::value && std::is_base_of<ClassB, V>::value>::type * = nullptr>
std::set<std::pair<K, V>> getEntries();
Это не красиво, никогда. Вы можете использовать enable_if_t
, поэтому вам не нужно ::type
, но вы не сэкономите слишком много места. Пример:
template<typename K, typename V, typename std::enable_if_t<std::is_base_of_v<ClassA, K> && std::is_base_of_v<ClassB, V>> * = nullptr>
std::set<std::pair<K, V>> getEntries();