class IShaderParam{
public:
std::string name_value;
};
template<class TParam>
class TShaderParam:public IShaderParam{
public:
void (TShaderParam::*send_to_shader)(const TParam&,const std::string&);
TShaderParam():send_to_shader(NULL){}
TParam value;
void up_to_shader();
};
typedef TShaderParam<float> FloatShaderParam;
typedef TShaderParam<D3DXVECTOR3> Vec3ShaderParam;
在另一個類的成員函數模板分配C++指針成員函數,我有IShaderParams的向量*和,我想送「send_to_shader」功能。我想分配的這些功能是這樣的參考:與其他類
Vec3ShaderParam *_param = new Vec3ShaderParam;
_param->send_to_shader = &TShader::setVector3;
這是函數:
void TShader::setVector3(const D3DXVECTOR3 &vec, const std::string &name){
//...
}
這是IshaderParams類*:
class TShader{
std::vector<IShaderParam*> params;
public:
Shader effect;
std::string technique_name;
TShader(std::string& afilename):effect(NULL){};
~TShader();
void setVector3(const D3DXVECTOR3 &vec, const std::string &name);
當我使用Visual Studio C++ Express 2008編譯項目我收到此錯誤:
Error 2 error C2440: '=' :can't make the conversion 'void (__thiscall TShader::*)(const D3DXVECTOR3 &,const std::string &)' a 'void (__thiscall TShaderParam::*)(const TParam &,const std::string &)' c:\users\isagoras\documents\mcv\afoc\shader.cpp 127
我可以做這項工作嗎?沒有?我不知道如何:-S 是的,我知道我可以實現與其他技術相同的目標,但我想知道我該怎麼做這個..
C++ 0x將允許從自由函數指針轉換爲PTMF,我想要求生成一個函子。但我不認爲這是他的錯誤信息表明的問題。 – Potatoswatter 2010-03-26 08:45:53