从具有可变数量模板化参数的模板化类中的特定基类获取结果

getting result from a specific base in a templated class with variable number of templated arguments

本文关键字:基类 结果 获取 参数      更新时间:2023-10-16

我想实现一个模板化类如下。

   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

我想要实现的是正确的吗?

由于obj是类型依赖表达式,编译器不会使用名称查找来确定obj.get是对象、函数、类型还是模板。除非您强制它这样做,否则编译器将假定它是一个对象或函数,以便进行语法分析。接下来,它看到<小于操作符(不是模板参数列表开头的<),很快就会感到困惑。你需要:

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

参见问题在哪里以及为什么我必须把模板和typename关键字?

除非TRT1, T2, T3T4中的一个,否则行:

   return TR::operator()(s);
应:

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

   return TR()(s);

由于operator()不能是静态成员函数