说我有以下内容:
template <class T>
class Foo {};
和后代班,
class Bar : public Foo<some_typename>{};
如果可能的话,我如何在不使用包含Bar.h的Foo.h的情况下将Bar传递给Foo的构造函数?
答案 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)