服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++超集C++/CLI模块的基本语法

C++超集C++/CLI模块的基本语法

2023-02-21 16:22天方 C/C++

这篇文章介绍了C++超集C++/CLI模块的基本语法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

托管对象的创建和引用

前文中我们已经演示过创建一个托管对象,对于如下C#代码:

?
1
System.Object x = new System.Object();

其在C++/CLI中的等价代码如下:

?
1
System::Object^ x = gcnew System::Object();

和传统的C++创建的语法比较下,

?
1
P* x = new P();

我们不难发现,对于托管对象,主要引入了如下两个语法:

  • 用gcnew代替new实现托管对象的创建

  • 用^代替*实现托管对象的指针

这种方式创建的对象是可以直接被CLR支持的,可以在C#中使用。托管对象指针使用的方式和传统的对象指针还是比较类似的,直接使用->即可:

?
1
2
System::Object^ x = gcnew System::Object();
auto str = x->ToString();

另外,C++/CLI也有一种类似于C++的对托管对象的引用的语法:

?
1
2
3
System::Object^ x = gcnew System::Object();
System::Object% y = *x;
auto str = y.ToString();

由于这种方式在C#里没有对应的语法,用起来感觉怪怪的,也不方便于其它.net语言集成。

托管类型的定义

我们也可以自定义托管类型,在CLR中,托管类型是分为引用类型(class)和值类型(struct)的,在C++/CLI中的分别定义方式如下:

引用类型:

?
1
2
3
public ref class MyClass
{
};

值类型:

?
1
2
3
public value class MyClass
{
};

在ISO C++中类定义中加上了ref或value标记为托管类型,还算比较容易使用。

枚举

枚举的定义和C++11的enum class一样,它像数字那样可以同时应用于托管类型和非托管类型。

?
1
public enum class SomeColors { Red, Yellow, Blue };

或者更精确的表示:

?
1
public enum class SomeColors : char { Red, Yellow, Blue };

数组

C++/CLI中新增了array<T> ^的方式定义数组。

?
1
array<int> ^a = gcnew array<int>(100) { 1, 2, 3 };

或者使用它的完整版:

?
1
cli::array<int> ^a = gcnew cli::array<int> {1, 2, 3};

不定参数

对于C#中的不定参数的语法:

?
1
void foo(params string[] args)

在C++/CLI中对应的版本为:

?
1
void foo(... array<String^>^ args)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://www.cnblogs.com/TianFang/p/4937779.html

延伸 · 阅读

精彩推荐