gpt4 book ai didi

c++ - 前向声明和模板实例化上下文

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:14 28 4
gpt4 key购买 nike

我有一个 header ,它向前声明一个结构、一个函数,并定义一个使用结构具体类型的模板函数:

---header.h

struct RegisterImpl;
RegisterImpl& getRegisterImpl();

template <typename Interface>
void registerModuleClass( .... )
{
RegisterImpl& reg = getRegisterImpl();
reg.data = 3;
...
}

---源代码.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 类型被完全定义之后。但似乎代码的类型解析发生在模板定义存在的地方,而不是实例化(在源文件中)

我在这里遗漏了什么吗?这里的困境是模板函数需要使用实现的具体类型,但具体类型发生在源文件中。有什么办法解决这个问题吗?

最佳答案

我不确定这个建议是否对您的情况有帮助,但这里有一个想法:您可以将代码包装在一个需要 RegisterImpl 作为模板参数的类模板中。

例子:

template<typename T>
struct Helper
{
T & getRegisterImpl()
{
static T instance;
return instance;
}

template<typename Interface>
void registerModuleClass()
{
T & reg = getRegisterImpl();
}
};

之后:

struct RegisterImpl
{
int data;
};

Helper<RegisterImpl> helper;

希望对您有所帮助。

关于c++ - 前向声明和模板实例化上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15714780/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com