1

これらの @things はEmPy です

C++

  const char *
  publish__@(spec.base_type.type)(void * untyped_data_writer, const void * untyped_message)
  {
    DataWriter * topic_writer = static_cast<DataWriter *>(untyped_data_writer);
    const __ros_msg_type & ros_message = *(const __ros_msg_type *)untyped_message;
    __dds_msg_type dds_message;
    conversion_cpp(ros_message, dds_message);

    @(__dds_msg_type_prefix)DataWriter * data_writer =
      @(__dds_msg_type_prefix)DataWriter::_narrow(topic_writer);
    DDS::ReturnCode_t status = data_writer->write(dds_message, DDS::HANDLE_NIL);

    // some common switch statements in C and C++

    }
  }

static const char *
publish(void * data_writer, const void * cool_message)
{
  if (!data_writer) {return "data writer handle is null";}
  if (!cool_message) {return "ros message handle is null";}

  DDS::DataWriter * topic_writer = static_cast<DDS::DataWriter *>(data_writer);
  __dds_msg_type dds_message;
  const char * err_msg = conversion_c(cool_message, &dds_message);
  if (err_msg != 0) {return err_msg;}

  @(__dds_msg_type_prefix)DataWriter * data_writer =
    @(__dds_msg_type_prefix)DataWriter::_narrow(topic_writer);
  DDS::ReturnCode_t status = data_writer->write(dds_message, DDS::HANDLE_NIL);
@[for field in spec.fields]@
@[if field.type.type == 'string']@
@[if field.type.is_array]@
  {
@[if field.type.array_size]@
    size_t size = @(field.type.array_size);
@[else]@
    size_t size = dds_message.@(field.name)_.length();
@[end if]@
    for (DDS::ULong i = 0; i < size; ++i) {
      // This causes the DDS::String_mgr to release the given c string without freeing it.
      dds_message.@(field.name)_[i]._retn();
    }
  }
@[else]@
  // This causes the DDS::String_mgr to release the given c string without freeing it.
  dds_message.@(field.name)_._retn();
@[end if]@
@[end if]@
@[end for]@

  // some common switch statements in C and C++
  }
}

この質問は、私が貢献しようとしているオープン ソース プロジェクトに少し特有のものなので、私が推測する正確な機能を指摘します。これは元のC メソッド であり、これはC++ メソッドです。

関数ポインターを使用する必要がありますか?
ここで起こっているもう 1 つのことは、C パッケージが C++ パッケージに依存していることです。

(これは良い質問ではないか、あいまいな質問かもしれませんが、このコードベースに慣れていないのでどうすればよいかわかりません)

4

0 に答える 0