提问人:Chris Gnam 提问时间:5/4/2023 最后编辑:Chris Gnam 更新时间:5/4/2023 访问量:51
创建依赖于另一个模板的类模板
Making a class template that is dependent on another template
问:
所以我有一组类,它们都是从基类派生的(注意:在下面的代码中用于指定精度类型(例如),而 ued 用于指定颜色类型(例如):RigidBody
Tp
float
Tc
RGB
template <typename Tp>
class RigidBody {
...
}
这些类是 、 、 等。下面是一个示例Model
Assembly
Light
Model
template <typename Tp, typename Tc>
class Model : public RigidBody<Tp> {
...
}
我现在需要编写一个模板化类,该类充当所有这些类的包装器,并且也派生自 .我目前拥有的是:Instance
RigidBody
template <typename Tp, typename ObjectType>
class Instance : public RigidBody<Tp> {
...
};
虽然这可行,但需要专门使用(例如)感觉很笨拙
Instance<float, Model<float,RGB>>
因为是多余的。我宁愿能够使用float
Instance<Model<float,RGB>>
我已经阅读了有关“模板模板”语法的信息,但这似乎并不能解决我的问题。我试过:
template <template<typename Tp,typename Tc> typename ObjectType>
class Instance : public RigidBody<Tp> {
...
}
但这不起作用,因为它是类声明的实际主体的未声明标识符。Tp
有没有办法得到我想要的行为?在任何情况下,我都不希望允许实例具有与它所包装的任何对象不同的精度。
答:
2赞
HolyBlackCat
5/4/2023
#1
让接受只是 .class Instance
<typename ObjectType>
添加到(它必须是公共的或受保护的)。using foo = Tp;
class RigidBody
然后,您可以使用 in 来访问该类型:typename ObjectType::foo
Instance
template <typename Tp>
class RigidBody
{
public:
using foo = Tp;
};
template <typename Tp>
class A : public RigidBody<Tp> {};
template <typename ObjectType>
class Instance : public RigidBody<typename ObjectType::foo> {};
评论
0赞
Chris Gnam
5/5/2023
再次感谢你。一如既往的非常有启发性的例子!
评论
template <typename T> class Instance
Tp
RigidBody
Tp
T
Tp
T