托管 C++ 的 __typeof 和 __gc 的 C++ CLI 等效项是什么?

What is the C++ CLI equivalent of managed c++'s __typeof and __gc?

我正在尝试将旧的 c++ 项目从 VS2003 转换为 VS2019。我正在学习,其中一部分是从托管 C++ 到 C++ CLI,因为托管 C++ 很快就被丢弃了。

大部分时间我都在管理,但我似乎无法弄清楚用什么替换 __typeof 关键字。这有什么好处吗?请参阅下面的代码片段,了解它是如何使用的。

private: System::ComponentModel::IContainer ^  components;

    private:
        void InitializeComponent(void)
        {
            this->components = gcnew System::ComponentModel::Container();
            System::Resources::ResourceManager ^  resources = gcnew System::Resources::ResourceManager(__typeof(USB::Form1));
            .
            .
            .
        }

此外,还有另一个重复出现的标识符,__gc,我找到了更多信息,但不确定我是否理解用什么替换它。

Char chars __gc[] = gcnew Char __gc[bytes->Length * 2];
Char hexDigits __gc[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
bool ImageNumberUsed __gc[];

有没有人对此有很好的了解并且知道上面给出的正确转换是什么?

我不能说我用过很多托管 C++,但我可以说 C++/CLI 等价物是什么。

  • __typeof(type) --> type::typeid
    • 像访问静态字段或给定类型的 属性 一样访问 typeid
    • Returns 类型为 System::Type^ 的对象。
    • 示例:gcnew System::Resources::ResourceManager(USB::Form1::typeid);
  • __gc[] --> class cli::array
    • cli::array 是成熟的托管类型。你用 gcnew 创建它,变量用帽子 ^ 声明,等等
    • cli::array 在数组中存储的对象类型和数组中的维数(默认为 1)上是通用的。数组的大小通过构造函数参数指定(使用圆括号,而不是方括号)。
    • 变量用类型名称声明,cli::array。方括号用于读取和写入值,不用于声明类型,也不用于创建数组。
    • 如果数组中的类型是托管引用类型,则需要在泛型类型中包含帽子 ^。示例:cli::array<String^>^ foo = ...
    • 例子:
      • cli::array<System::Char>^ chars = gcnew cli::array<System::Char>(bytes->Length * 2);
      • cli::array<System::Char>^ hexDigits = { '0', '1', .... };
        • (我喜欢说 System.Char,作为额外提醒,它与小写 char 不同。)
      • cli::array<bool>^ ImageNumberUsed;(分配前未初始化或为空)
      • 二维:cli::Array<String^, 2>^ stringGrid = gcnew cli::Array<String^, 2>(10, 10);