我试图让(对我来说)相当复杂的模板代码结构起作用。
我有: 通用类型的类 shaderProperty
class IShaderProperty {
public:
virtual ~IShaderProperty() {}
};
struct IShaderMatth; //forward declaration
template<typename ShadeType>
struct ShaderMatth;//forward declaration
template <typename T>
class ShaderProperty : public IShaderProperty
{
public:
template <typename SomeType>
inline T getValue(ShaderMatth<SomeType>* shaderMatth){
pair<map<void*, IShaderMatth>::iterator,bool> success = shaderMatth->properties.insert(make_pair((void*)this, ShaderMatth<T>(m_shader)));
assert(success.second);
return m_shader->shade((ShaderMatth<T>*)&(*success.first));
}
};
和类 ShaderMatth,它也是泛型类型,存储映射,而用作键的 void* 指针实际上是指向 ShaderProperty 的指针。 ShaderMatth 的代码:
#include "ShaderProperty.h"
struct IShaderMatth {
virtual ~IShaderMatth() {}
map<void*, IShaderMatth> properties;
...
};
template <class ReturnType>
struct ShaderMatth : public IShaderMatth{
ShaderMatth(IShader<ReturnType>* shaderPtr){shader=shaderPtr};
~ShaderMatth(void);
IShader<ReturnType>* shader;
};
现在错误发生在函数 inline T getValue() 的第一行
我得到一个
Error C2027 use of undefined type 'ShaderMatth<ShadeType>'
但我不明白为什么..我有模板化结构 ShaderMatth 的前向声明,并且在第二组代码中我包含了第一组代码,所以前向引用应该可以解决,不是吗?
我挂了 - 请帮忙:)
最佳答案
前向声明 ShaderMatth
不足以使用代码 shaderMatth->properties
。
必须在该行之前定义。
关于C++花式模板代码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1911434/