gpt4 book ai didi

C++ 指针成员函数与模板赋值与另一个类的成员函数

转载 作者:行者123 更新时间:2023-11-28 01:11:55 25 4
gpt4 key购买 nike

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* vector 和我想发送到“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是的,我知道我可以用其他技术实现相同的目标,但我想知道我该怎么做......

最佳答案

那是因为您正在尝试使用不兼容的指针。 setVector3 是一个 TShader 方法,但 send_to_shader 需要一个 TShaderParam 方法。

不知道你想要什么,你可以通过改变这个来编译你的例子:

void (TShaderParam::*send_to_shader)( const TParam&,const std::string&);

为此:

void (TShader::*send_to_shader)( const TParam&,const std::string&);

关于C++ 指针成员函数与模板赋值与另一个类的成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2521401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com