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

 更新时间:2022年07月04日 10:48:17   作者:天方  
这篇文章介绍了C++超集C++/CLI模块的基本用法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

C#和C++是非常相似的两种语言,然而我们却常常将其用于两种不同的地方,C#得益于其简洁的语法和丰富的类库,常用来构建业务系统。C++则具有底层API的访问能力和拔尖的执行效率,往往用于访问底层模块和构建有性能要求的算法。

这两种场景看起来有较大的差异,大多数的时候可以各行其道。但还是有很多时候会出现融合的情况。当我们构建分布式系统的时候,由于RPC机制一般都是语言无关的,我们大可以将其各尽所长,按需划分在最能发挥其长处的位置。然而,一旦我们需要构建融合两者需求的集中式系统的时候,就会头痛无比。

此时,我们可以使用C++/CLI搭建C++和.Net之间的桥梁,C++/CLI是一个比较有意思的两栖模块,它具有如下特点

  • 既可以访问.Net类库,也可以访问C++原生类库

  • 既可以被.Net程序引用,也可以被C++原生程序引用

使用C++/CLI,我们可以使用C++编写算法,用C#编写界面,也可以使用.Net Framework类库增强C++程序功能,各取所长。

下面我们就以一个简单的例子来演示一下它的用法:

Calculator.h:

#pragma once

namespace CppCliTest
{
    public ref class Calculator
    {
        public:
        int Add(int a, int b);
    };
}

Calculator.cpp

#include "stdafx.h"
#include "Calculator.h"

namespace CppCliTest
{
    int Calculator::Add(int a, int b)
    {
        return a + b;
    }
}

main.cpp

#include "stdafx.h"
#include "Calculator.h"

using namespace System;
using namespace CppCliTest;

int main(array<System::String ^> ^args)
{
    Calculator^ calculator = gcnew Calculator();
    int result = calculator->Add(3, 2);

    Console::WriteLine(L"Result is {0}", result);
    return 0;
}

从这个例子中,我们可以简单的管中窥豹的看看C++/CLI是在C++的基础上扩充了一套语法,使其具有访问.Net原始的功能,这里用到的有:

  • 使用ref class声明CLI引用类型(C#中的class)

  • 使用^(例如如这里的String ^)来定义CLI引用类型

  • 使用gcnew创建CLI的引用类型

具体的功能我将在后面的文章中再做介绍,MSDN中也有文档详细的介绍了这些语法:https://msdn.microsoft.com/zh-cn/library/ms235289.aspx

虽然C++/CLI同时具有两者的功能,但它使得本就比较复杂的C++语法变得更加复杂了(特别是初期的版本,非常复杂,现在已经简化了不少了),并且长期没有得到VisualStudio这宇宙第一IDE的较好支持(在VS2010的时候还不支持智能提示),是无法与拥有大量语法糖的C#比开发效率的。加上大多数需求场景可以通过分布式系统解决,这些都导致了它一直没有得到太多的关注。但是,微软还是在积极的改进它的,加上C++11的支持,现在已经比之前好用多了,如果用在合适的位置,是绝对能让你的开发如鱼得水的。

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

相关文章

  • 探讨++i与i++哪个效率更高

    探讨++i与i++哪个效率更高

    i++总是要创建一个临时对象,在退出函数时还要销毁它,而且返回临时对象的值时还会调用其拷贝构造函数
    2013-10-10
  • 基于C语言实现UDP服务器

    基于C语言实现UDP服务器

    这篇文章主要为大家详细介绍了如何使用C语言编写一个简单的UDP服务器程序,以及如何接收和处理客户端发送的数据,有需要的小伙伴可以了解下
    2024-10-10
  • C++反转字符串中单词的字符顺序的两种方法

    C++反转字符串中单词的字符顺序的两种方法

    在处理字符串相关的问题时,反转字符串中每个单词的字符顺序是一个常见的任务,同时要保证空格和单词的初始顺序不变,下面我们将详细介绍两种解决该问题的方法,包括其解题思路和具体实现细节,需要的朋友可以参考下
    2025-03-03
  • C++ STL标准库std::vector的使用详解

    C++ STL标准库std::vector的使用详解

    vector 是表示可以改变大小的数组的序列容器,本文主要介绍了C++ STL标准库std::vector的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C++面试之你知道有哪些可执行体吗

    C++面试之你知道有哪些可执行体吗

    可执行体其实也叫可调用对象,这也是面试常常会考到的问题,这篇文章就来和大家详细讲讲C++中的可执行体,感兴趣的小伙伴可以了解一下
    2023-06-06
  • Qt实现自定义验证码输入框控件的方法

    Qt实现自定义验证码输入框控件的方法

    本文主要介绍了Qt实现自定义验证码输入框控件的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • C++ Protobuf实现接口参数自动校验详解

    C++ Protobuf实现接口参数自动校验详解

    用C++做业务发开的同学是否还在不厌其烦的编写大量if-else模块来做接口参数校验呢?今天,我们就模拟Java里面通过注解实现参数校验的方式来针对C++ protobuf接口实现一个更加方便、快捷的参数校验自动工具,希望对大家有所帮助
    2023-04-04
  • C语言单链表实现学生管理系统

    C语言单链表实现学生管理系统

    这篇文章主要为大家详细介绍了C语言单链表实现学生管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • C++之Boost::array用法简介

    C++之Boost::array用法简介

    这篇文章主要介绍了C++之Boost::array用法简介,较为详细的分析了Boost::array中的常见用法,并用实例的形式予以总结归纳,需要的朋友可以参考下
    2014-10-10
  • C语言绘制三角函数曲线

    C语言绘制三角函数曲线

    这篇文章主要为大家详细介绍了C语言绘制三角函数曲线,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06

最新评论