-1
我嘗試實施樣[自我描述實體]像這樣Qt的C++:如何存儲函數指針在地圖時的功能有不同的參數類型
//entity.h
class Entity : public QObject
{
Q_OBJECT
Q_PROPERTY(long Id READ Id WRITE setId NOTIFY IdChanged)
Q_PROPERTY(QString Text READ Text WRITE setText NOTIFY TextChanged)
private:
long _id;
QString _text;
typedef void (Entity::*LongFnPtr)(long);
std::map<std::string, LongFnPtr> longSetter;
typedef void (Entity::*StringFnPtr)(QString);
std::map<std::string, StringFnPtr> stringSetter;
public:
Entity();
void SetValue(std::string propName, long value);
void SetValue(std::string propName, QString value);
//Id Property
long Id();
void setId(long id);
//Text Property
QString Text();
void setText(QString text);
}
而且
//entity.cpp
Entity::Entity()
{
this->longSetter["Id"] = &Entity::setId;
this->stringSetter["Text"] = &Entity::setText;
}
long Entity::Id(){
return _id;
}
void Entity::setId(long id){
_id = id;
}
QString Entity::Text(){
return _text;
}
void Entity::setText(QString text){
_text = text;
}
void Entity:SetValue(std::string propName, long value){
if (longSetter[propName]){
(this->*longSetter[propName](value)
}
}
void Entity:SetValue(std::string propName, QString value){
if (stringSetter[propName]){
(this->*stringSetter[propName](value)
}
}
我2個問題是:
- 如何創建1個函數指針& propSetter地圖所有不同的數據類型
- 我知道函數指針signatural特定於實體類。我如何使用這個實體類作爲基類,並重用派生類的屬性setter的SetValue函數?
看起來你正在重新編碼Qt屬性系統,而沒有真正解釋你爲什麼要這樣做,因爲它已經存在,是否有可能是Qt屬性系統不適合你的原因? 該文檔在[Qt Property System](http://doc.qt.io/qt-5/properties.html)上相當不錯,請關注[閱讀文章](http://doc.qt。 io/qt-5/properties.html#閱讀和寫作屬性與元對象系統)屬性 –
你救了我的生命...這樣一個noob問題...! :D我只是開始學習Qt幾天,並試圖爲我的項目構建ORM。不知道這個物業系統存在!許多感謝和尊重! :) –