我有一个标头,它前向声明了一个结构、一个函数,并定义了一个使用结构具体类型的模板函数:
---header.h
struct RegisterImpl;
RegisterImpl& getRegisterImpl();
template <typename Interface>
void registerModuleClass( .... )
{
RegisterImpl& reg = getRegisterImpl();
reg.data = 3;
...
}
---source.cpp
struct RegisterImpl
{
int data;
};
RegisterImpl& getRegisterImpl()
{
static RegisterImpl instance;
return instance;
}
struct testiFace
{
virtual void Blah() = 0;
};
void useTemplate()
{
registerModuleClass<testiFace>(....);
}
我希望模板函数的实例化registerModuleClass
将发生在useTemplate
,这发生在RegisterImpl
完全定义类型之后。但似乎代码的类型解析发生在模板定义存在的地方,而不是实例化(在源文件中)
我在这里错过了什么吗?这里的困境是模板函数需要使用实现的具体类型,而具体类型发生在源文件中。有什么办法吗?