【问题标题】:C++/Flatbuffers - Verify table which is not root_typeC++/Flatbuffers - 验证不是 root_type 的表
【发布时间】:2020-11-04 13:36:50
【问题描述】:

这是我的脸书:

namespace Vibranium;

enum LOGIN_STATUS : int {
  INVALID_CREDENTIALS,
  LOGIN_SUCCESS,
  ACCOUNT_LOGGEDIN,
  ACCOUNT_INGAME,
  ACCOUNT_BANNED,
  ACCOUNT_LOCKED
}

table LoginRequest{
    email:string;
    password:string;
    client_hash:string;
    connection_id:uint32;
}

table LoginResponse{
    account_id:uint32;
    status:LOGIN_STATUS;
}

root_type LoginRequest;

这会生成名为VerifyLoginRequestBuffer 的函数,但是没有名为VerifyLoginResponseBuffer 的函数,所以我现在不知道如何验证LoginResponse

我的问题是:

如何在 C++ 中验证未标记为 root_type 的表? 如果可能的话,任何人都可以写一个例子作为答案吗?

附: 我尝试创建一些独特的函数来检查所有可能的类型,如下所示:

template<typename T>
bool VerifyBuffer(flatbuffers::Verifier &verifier){
    verifier.VerifyBuffer<T>(nullptr);
}

所以我的计划是像这样提供LoginResponse

bool check = VerifyBuffer<Vibranium::LoginResponse>(&verifier);

但是 LoginResponse 继承自 private flatbuffers::Table 这是一个问题。所以我被困在了这里。

【问题讨论】:

    标签: c++ flatbuffers


    【解决方案1】:

    VerifyLoginRequestBuffer 之类的函数是为 rout 类型生成的“便利”函数。您可以查看他们的(小)实现,并为任何其他表类型调用完全相同的函数。

    【讨论】:

    • 你能提供一个小例子吗?我尝试了您的建议,但似乎无法使其在生成的类/结构之外工作。
    • 这是我尝试过的bool check = verifier.VerifyBuffer&lt;Vibranium::LoginResponse&gt;(nullptr);,但这不起作用。有什么建议吗?
    猜你喜欢
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    相关资源
    最近更新 更多