HLCPP 物件

必要條件

本教學課程是以編譯 FIDL 教學課程為基礎。對於 完整的 FIDL 教學課程,請參閱總覽

總覽

本教學課程會逐步介紹如何使用 fostr 工具。

若您想要自行編寫程式碼,請刪除下列目錄:

rm -r examples/fidl/hlcpp/fostr farnet/public/lib/fostr/fidl

本教學課程包含下列步驟:

  • 為 FIDL 程式庫定義 fostr_fidl 目標,這將允許針對以下項目啟用偵錯列印: 在程式庫中為各個型別定義一個 operator<<
  • 使用 fostr_fidl 目標。
  • 使用格式設定工具程式碼編寫範例。

定義 fostr_fidl 目標

  1. //src/lib/fostr/fidl 中為 BUILD 檔案建立目錄:

    mkdir -p src/lib/fostr/fidl/fuchsia.examples
    
  2. 建立 BUILD 檔案:

    touch src/lib/fostr/fidl/fuchsia.examples/BUILD.gn
    
  3. 將以下定義新增至建構檔案:

    # Copyright 2020 The Fuchsia Authors. All rights reserved.
    # Use of this source code is governed by a BSD-style license that can be
    # found in the LICENSE file.
    
    import("//src/lib/fostr/build/fostr_fidl.gni")
    fostr_fidl("fuchsia.examples") {
      fidl_target = "//examples/fidl/fuchsia.examples"
    }
    
    

這會為 fuchsia.examples 程式庫定義 fostr 目標。不限 您必須在建構檔案中指定程式庫的依附元件。 則不適用於本教學課程。如需更複雜的 請參閱類別 fidl 目錄中的現有定義。

在 fostr_fidl 目標中新增依附元件

本教學課程使用的目標程式庫是簡單的主機測試, 位於examples/fidl/hlcpp/fostr。請注意,測試用的 BUILD 檔案 包含 fostr_fidl 目標做為依附元件:

executable("bin") {
  testonly = true
  output_name = "fostr_example_test"
  sources = [ "main.cc" ]
  deps = [
    "//examples/fidl/fuchsia.examples:fuchsia.examples_hlcpp",
    "//src/lib/fostr/fidl/fuchsia.examples",
    "//src/lib/fxl/test:gtest_main",
  ]
}

加入的程式庫會自動超載 << 運算子。路徑 依據產生下列項目的 FIDL 程式庫名稱:

#include <src/lib/fostr/fidl/fuchsia/examples/formatting.h>

使用格式設定工具程式碼編寫範例

撰寫一些預留位置測試來展示輸出內容:

TEST(FidlExamples, Bits) {
  auto flags = fuchsia::examples::FileMode::READ | fuchsia::examples::FileMode::WRITE;
  std::cout << flags << std::endl;
}

TEST(FidlExamples, Enums) {
  auto enum_val = fuchsia::examples::LocationType::MUSEUM;
  std::cout << enum_val << std::endl;
}

TEST(FidlExamples, Structs) {
  fuchsia::examples::Color default_color;
  std::cout << default_color << std::endl;
}

TEST(FidlExamples, Unions) {
  auto int_val = fuchsia::examples::JsonValue::WithIntValue(1);
  std::cout << int_val << std::endl;
}

執行範例

如要執行範例,請按照下列步驟操作:

  1. 設定 GN 版本以包含範例:

    fx set core.x64  --with //examples/fidl/hlcpp/fostr
    
  2. 執行測試:

    fx test -vo fostr-example-test