protobuf C++ 生成代码中自动匹配set方法

如果proto结构体的变量是基础变量,比如int、string等等,那么set的时候直接调用set_xxx即可。

如果变量是自定义类型,那么C++的生成代码中,就没有set_xxx函数名,取而代之的是三个函数名:

  • set_allocated_xxx()
  • release_xxx()
  • mutable_xxx()

使用set_allocated_xxx()来设置变量的时候,变量不能是普通栈内存数据,必须是手动new出来的指针,至于何时delete,就不需要调用者关心了,protobuf内部会自动delete掉通过set_allocated_设置的内存;

release_xxx()是用来取消之前由set_allocated_xxx设置的数据,调用release_xxx以后,protobuf内部就不会自动去delete这个数据了;

mutable_xxx()是用来返回之前set_allocated_xxx设置的数据的const指针,方便你临时读取这个数据的同时,protobuf内部继续自动管理(delete)该数据。

如下面的例子,直接调用对应的方法就行。

.cpp

bool CDispCtrlClient::SetDisplayBackLight(DispType type, bool on) {
    if (mOnline) {
        SetDispBackLight msgSetBacklight;
        msgSetBacklight.set_display_type(type);
        msgSetBacklight.set_back_light(on);

    } else {
    }

    return true;
}

.proto

message SetDispBackLight
{

    required DispType display_type          = 1;
    required bool back_light                = 2;
}

 

 

你可能感兴趣的:(C++)