0

私はいくつかのコード MISRA の苦情を申し立てようとしていますが、次のコードがあります。

static void DBusCallback(GObject *object, GAsyncResult *res, gpointer user_data) {
    std::string * const tmp = reinterpret_cast<std::string*>(user_data);
    ...

ここで、DBusCallback は call_DBus のコールバックです。

   (void)call_DBus(proxy, NULL, &DBusCallback, reinterpret_cast<void*>(new std::string(user_data)));

//最後の pram は、コールバックからの user_data です

コンパイルして正常に実行されますが、gpointer からの文字列変換で次の MISRA 警告が表示されます: MISRA.CAST.PTR.UNRELATED : Object of pointer type 'gpointer' cast to unrelated type 'string*'

ルールは次のとおりです。 MISRA-C++ ルール 5-2-7 (必須): ポインター型を持つオブジェクトは、直接的または間接的に無関係なポインター型に変換してはなりません。【不明 5.2.10(7)】 根拠 ポインタから無関係な型への変換結果は未規定である。

この警告を回避するためのアイデアはありますか?

4

2 に答える 2

-1

gpointerstatic_castの代わりに使用してみてください。reinterpret_cast私の場合、それは文字列ではなく別のクラスでしたが、これは次のように関連しているとは思いません:

std::string * tmp = static_cast<std::string *>(user_data);
于 2015-11-04T12:00:44.457 に答える