数据库字段 C++定义

通过加入assigned字段来判断是否需要更新数据库字段

field.h

#ifndef _FIELD_H_
#define _FIELD_H_


#include <sdbus/variant.h>


#define SETIFASSIGNED(A, B) \
    if (B.assigned()) { \
        A = B; \
    } \


template<class T>
class Field
{
public:
    Field() : assigned_(false) {}
    Field(const Field<T>& rhs) : value_(rhs.value_), assigned_(false) {}
    Field(const T& value) : value_(value), assigned_(false) {}
    Field& operator= (const Field<T>& rhs) {value_ = rhs.value_; assigned_ = true; return *this;}
    Field& operator= (const T& value) {value_ = value; assigned_ = true; return *this;}


    operator T () {return value_;}
    operator const T() const {return value_;}


    const T& ref() const {return value_;}


    bool assigned() const {return assigned_;}


        T value() {return value_;}


private:
    T value_;
    bool assigned_;
};


void GetFieldString(const sdbus::VariantMap& mp, int fid, Field<std::string>& field);
void GetFieldInt(const sdbus::VariantMap& mp, int fid, Field<int>& field);
void GetFieldDouble(const sdbus::VariantMap& mp, int fid, Field<double>& field);
void GetFieldBool(const sdbus::VariantMap& mp, int fid, Field<bool>& field);


#endif

filed.cpp

#include "field.h"

void GetFieldString(const sdbus::VariantMap& mp, int fid, Field<std::string>& field)
{
    std::string val;
    if (mp.GetString(fid, val)) {
        field = val;
    }
}

void GetFieldInt(const sdbus::VariantMap& mp, int fid, Field<int>& field)
{
    int val;
    if (mp.GetInt32(fid, val)) {
        field = val;
    }
}

void GetFieldDouble(const sdbus::VariantMap& mp, int fid, Field<double>& field)
{
    double val;
    if (mp.GetDouble(fid, val)) {
        field = val;
    }
}

void GetFieldBool(const sdbus::VariantMap& mp, int fid, Field<bool>& field)
{
    bool val;
    if (mp.GetBool(fid, val)) {
        field = val;
    }
}

使用方式:

classQuote
{
public:
    Quote() : {}

public:
    Field<std::string> id_;  

   Field<std::string> protocol_id_;    

   ......

}

赋值:

GetFieldString(mp,FID_ID, quote->id_);

读取:

if(quote->protocol_id_.assigned())
{
        INSERT_STRING_FIELD(protocol_id, quote->protocol_id_.value());

}

if(quote->*.assigned())
{
         INSERT_STRING_FIELD(*,quote->*.value());
}

 

优势举例:

更新数据库某些字段,可以统一提供一个接口即可。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值