我一直在研究一个简单的标题库,但我遇到了一个我无法想象的循环问题。我按类型返回哪个概率没有帮助。
template<typename T>
class Foo;
class Bar;
class Baz
{
public:
template<typename T>
T getAFoo<T>()
{
return Foo<T>();
}
Bar getABar() // Prefer return by type in this situation.
{
return Bar(); // Error.
}
};
template<typename T>
class Foo {
/* ... */
void doSomething() { m_baz.something(); }
Baz &m_baz;
};
class Bar {
/* ... */
void doSomething() { m_baz.something(); }
Baz &m_baz;
};
我尝试对函数Bar getABar()
进行原型设计,然后在Bars
定义之后定义它,但只是出现了重复的符号错误。
有点觉得我只需要它就是一个没有价值的模板。
答案 0 :(得分:0)
我也很抱歉。怎么样:
template<typename T>
class Foo;
class Bar;
class Baz
{
public:
template<typename T>
T getAFoo()
{
return Foo<T>();
}
void something(){}
inline Bar getABar();
};
template<typename T>
class Foo {
/* ... */
void doSomething() { m_baz.something(); }
Baz &m_baz;
};
class Bar {
public:
Bar(Baz& baz)
:m_baz(baz)
{
}
/* ... */
void doSomething() { m_baz.something(); }
Baz &m_baz;
};
Bar Baz::getABar()
{
return Bar(*this);
}