C++花式模板代码问题

标签 c++ templates

我试图让(对我来说)相当复杂的模板代码结构起作用。

我有: 通用类型的类 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/

相关文章:

c++ - 为什么我的网络 TCP/UDP 实现不起作用?

c++ - 在 C++ 中用一个 if 满足两个条件

c++ - char指针的删除函数

c++ - 通过示例了解变量模板

c++全局运算符不能很好地与模板类一起使用

c++ - 我应该让我的功能尽可能通用吗?

c++ - decltype 和模板的问题

c++ - 从 GetSystemTimePreciseAsFileTime() 到本地时间的可靠快速方法

C++引用复制麻烦(STL对)

c++ - 部分特化不特化任何模板参数