0
템플릿 코드가 다소 복잡한 구조로 작동하려고합니다.C++ 멋진 템플릿 코드 문제
내가 무엇을 :이 * 키로서 사용 포인터가 실제로 포인터 제네릭 형식
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의 클래스 shaderProperty입니다 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;
};
이제 오류가 내가
Error C2027 use of undefined type 'ShaderMatth<ShadeType>'
얻을 함수를 인라인 T getValue()
의 첫 번째 줄에 발생하지만 난 왜 이해가 안 나는 ShaderMatth 템플릿의 구조체 선언을 가지고 있고 두 번째 코드 묶음에는 첫 번째 코드 묶음이 포함되어 있으므로 앞으로 참조가 제대로 작동하지 않을까요? 내가 매달려있어
- 앞으로 ShaderMatth
를 선언하는 코드 shaderMatth->properties
를 사용하는 것만으로는 충분하지 않습니다 :
실제로 이것이 기술적으로 사실이며 표준에 의해 요구되는 반면 MSVC++ (오류 코드로 판단하면 OP가 사용하는 것임)는 상당히 엄격하지 않습니다. 단지 함수 앞에 완전히 유형을 선언해야합니다 인스턴스화 될 수 있습니다. Shmoopty가 말했듯이, 당신이 모든 휴대용 장치에 있기를 원하면, 그렇게하십시오; GCC는 훨씬 덜 편안합니다 :) – moonshadow
감사! 너희들은 좋다 :) 대답을 결론 짓는 : 제 경우에는 함수를 별도의 파일로 구현해야합니다. 그러면 모든 것이 잘되었습니다! – Mat