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;
別のクラスには、「send_to_shader」に送信したい IShaderParams* と関数のベクトルがあります。これらの関数の参照を次のように割り当てようとしています:
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 でプロジェクトをコンパイルすると、次のエラーが表示されます。
エラー 2 エラー C2440: '=' : 'void (__thiscall TShader::* )(const D3DXVECTOR3 &,const std::string &)' を 'void (__thiscall TShaderParam::* )(const TParam に変換できません&,const std::string &)' c:\users\isagoras\documents\mcv\afoc\shader.cpp 127
課題はできますか?いいえ?方法がわからない :-S はい、他の手法でも同じ目的を達成できることはわかっていますが、これを行う方法を知りたい..