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;
В другом классе у меня есть вектор 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, я получаю эту ошибку:
Ошибка 2, ошибка C2440: '=': невозможно
преобразование 'void (__thiscall
TShader :: *) (const D3DXVECTOR3 &, const
std :: string &) 'a' void (__thiscall
TShaderParam :: *) (const TParam
&, const std :: string &) '
C: \ Users \ Исагор \ документы \ MCV \ afoc \ shader.cpp
127
Могу ли я выполнить задание? Нет? Я не знаю как
Да, я знаю, что могу достичь той же цели с помощью других методов, но я хочу знать, как я могу это сделать ..