получение результата из конкретной базы в шаблонном классе с переменным числом шаблонных аргументов

Я пытаюсь реализовать шаблонный класс, как показано ниже.

   struct Ciccio2 : public T1, public T2, public T3, public T4
{
template<typename TR>
int get(const string& s) const
{
return TR::operator()(s);
}
};

Все шаблонные аргументы похожи на следующий пример класса

   struct AA{
int operator()(const string& s) { return 1;}
};

Я пытаюсь также иметь глобальную функцию экстрактора, но когда я использую функцию шаблона ниже, g ++ выдает ошибку сборки, говорящую

   template<class TA, class T1, class T2, class T3, class T4>
int extract(const Ciccio2<T1,T2,T3,T4>& obj, const string& s)
{
return obj.get<TA>(s);
}

код ниже не говорит

expected primary expression before > token

Это правильно, что я пытаюсь реализовать?

0

Решение

поскольку obj является зависимым от типа выражением, компилятор не будет использовать поиск имени, чтобы определить, obj.get является объектом, функцией, типом или шаблоном. Если вы не заставите это сделать иначе, компилятор предполагает, что это объект или функция для синтаксического анализа. Далее он видит < меньше, чем оператор (не < начало списка аргументов шаблона), и вскоре после этого запутывается. Тебе нужно:

return obj.template get<TA>(s);

Смотрите также вопрос Куда и почему я должен поместить ключевые слова шаблона и типа?

1

Другие решения

Если не TR один из T1, T2, T3, а также T4, линия:

   return TR::operator()(s);

должно быть:

   return TR().operator()(s);

или же

   return TR()(s);

поскольку operator() не может быть статической функцией-членом.

0

По вопросам рекламы [email protected]