托管 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);
我正在尝试将旧的 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[]
--> classcli::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
不同。)
- (我喜欢说 System.Char,作为额外提醒,它与小写
cli::array<bool>^ ImageNumberUsed;
(分配前未初始化或为空)- 二维:
cli::Array<String^, 2>^ stringGrid = gcnew cli::Array<String^, 2>(10, 10);