我正试图将旧的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[];
有没有人很好地掌握了这一点,知道上面的上下文给出了什么适当的转换?
我不能说我使用过很多Managed c++,但我可以说出c++/CLI的等同物是什么。
__typeof(type)
—>type::typeid
- 访问
typeid
,就好像它是给定类型的静态字段或属性。 - 返回
System::Type^
类型的对象。 示例:
gcnew System::Resources::ResourceManager(USB::Form1::typeid);
- 访问
__gc[]
—>类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', .... };
- (我喜欢说系统。Char,作为额外的提醒,它与小写的
char
不同。)
- (我喜欢说系统。Char,作为额外的提醒,它与小写的
cli::array<bool>^ ImageNumberUsed;
(未初始化或未赋值)- 二维:
cli::Array<String^, 2>^ stringGrid = gcnew cli::Array<String^, 2>(10, 10);