我有向前聲明瞭一個結構,功能,並且定義使用的混凝土結構體類型的模板函數的報頭:向前聲明和模板實例上下文
--- 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
類型已完全定義。但似乎代碼的那種類型的分辨率是發生在這裏的模板定義存在的地方,而不是實例化(在源文件)
我在這裏失去了一些東西?這裏的困境是模板函數需要使用實現的具體類型,但具體類型發生在源文件中。任何方式在這個?