从具有可变数量模板化参数的模板化类中的特定基类获取结果
getting result from a specific base in a templated class with variable number of templated arguments
我想实现一个模板化类如下。
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关键字?
除非TR
是T1
, T2
, T3
和T4
中的一个,否则行:
return TR::operator()(s);
应: return TR().operator()(s);
或
return TR()(s);
由于operator()
不能是静态成员函数
相关文章:
- std::具有相同基类的类的变体
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 基类中的函数名称解析
- C++初始化基类
- 如何通过派生类函数更改基类中的向量
- 如何定义一个纯抽象基类
- 如何使用基类指针引用派生类成员
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何引用基类的派生类?
- 如果基类包含双指针成员,则派生类的构造函数
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 为什么此派生对象无法访问基类的后递减方法?
- 公开最直接的基类模板名称
- 依赖于基类以获取派生类结果的C++函数
- 基类的指针数组;每次项目启动我都有不同的结果
- 如何使从基类继承的对象访问字符方法,但有自己的结果
- 从具有可变数量模板化参数的模板化类中的特定基类获取结果
- 当基类指针强制转换给出相同的结果时,为什么要使用虚函数?