【发布时间】:2015-03-02 05:31:20
【问题描述】:
我有一个声明模板函数的库:
template <typename T>
void Foo(blah...)
{
class Bar mybar;
...
}
类 Bar 没有在这个库中定义,但是因为它只是一个模板,所以此时不应该实例化它;因此,通过显式使用 class 关键字,成功编译了库。
稍后在我确实需要实例化此模板的主程序文件中,我将文件包含在类 Bar 的完整定义中。它曾经与 gcc 4.4.2 一起工作,但现在升级到 4.8.1 我收到错误:
"Foo(blah...) [with T = blahblah]::Bar mybar has incomplete type"
编译器似乎将 Bar 视为模板函数中的临时类声明,而不是转发类。我想知道是否有什么可以解决这个问题,或者这个技巧无论如何都不应该起作用?这样做的重点是,类 Bar 有很多依赖项,并且大多数使用我的库的程序不需要类 Bar,因此没有必要链接类 Bar 所依赖的所有额外库。
TIA
【问题讨论】:
标签: c++ templates incomplete-type