Я пытаюсь заставить (для меня) довольно сложную конструкцию шаблонного кода работать.
что у меня есть:
класс 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, и во второй пакет кода я включаю первый пакет кода, так что прямая ссылка должна сработать, нет?
Я вешаю - помогите пожалуйста:)