gpt4 book ai didi

c++ - 在 C++ 中使用什么代替模板化虚方法

转载 作者:行者123 更新时间:2023-11-30 02:36:30 27 4
gpt4 key购买 nike

我有这个例子:

class Entity
{
float mX;
float mY;
string mName;
// other attributes
public:
void setPosX(float x);
void setPosY(float y);
void setName(string name);
// other setters

template<typename T>
virtual void setAttributeValue(string param, T value)
{
if(param == "x")
setX(value);
else if(param == "y")
setY(value);
else if(param == "name")
setName(value);
// ...
}
};

class SpecialEntity : public Entity
{
int specialAttr;
// other special attributes
public:
void setSpecialAttr(int val);
// other setters

template<typename T>
virtual void setAttributeValue(string param, T value)
{
Entity::setAttributeValue(param, value);

if(param == "specialAttr")
setSpecialAttr(value);
// ...
}
};

这不会编译,因为模板化虚方法是不允许的。

我在我的编辑器应用程序中需要这个,它有一个属性网格控件,根据该控件中属性的名称,我需要从实体类或继承的实体类调用方法来设置属性值。

实现此目标的最佳方法是什么。

最佳答案

当我不得不这样做时,我使用的选项之一是传递 boost::any 而不是 T

virtual void setAttributeValue(string param, boost::any value)
{
if(param == "x")
setX(boost::any_cast<int>(value));
else if(param == "y")
setY(boost::any_cast<int>(value));
else if(param == "name")
setName(boost::any_cast<std::string>(value));
// ...
}

关于c++ - 在 C++ 中使用什么代替模板化虚方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32596402/

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