使用继承模板类的类作为模板类中的构造函数参数?

时间:2010-10-07 03:29:52

标签: c++ templates

说我有以下内容:

template <class T>
class Foo {};

和后代班,

class Bar : public Foo<some_typename>{};

如果可能的话,我如何在不使用包含Bar.h的Foo.h的情况下将Bar传递给Foo的构造函数?

2 个答案:

答案 0 :(得分:0)

这是不寻常的,但是根据你的需要(可能是精心设计的),常常有办法解决它。

明白将另一个Bar传递给Foo是有意义的。

在这种情况下,您可以:

1)在Foo中创建第二个模板参数,并在构造中布置所需的接口:

template < typename T, typename Bar_ >
class Foo {
   /* ... */
   Foo(Bar_& bar) : weight_(bar.getWeight()) {
   }
   /* ... */

2)或者只使用模板ctor:

template < typename Bar_ >
Foo(Bar_& bar) : weight_(bar.getWeight()) {
}

3)如果Foo + Bar是轻量级的,你可以创建一个扩展的初始化列表,由bar在初始化时使用。

4)因为它是一个模板(并且实现必须对其子类可见并且具有特殊的链接),你还可以声明一个Foo ctor,它通过指针获取一个Bar,然后在Bar.hpp中定义Foo构造函数

答案 1 :(得分:0)

相关问题