C#和C++是很是类似的两种语言,然而咱们却经常将其用于两种不一样的地方,C#得益于其简洁的语法和丰富的类库,经常使用来构建业务系统。C++则具备底层API的访问能力和拔尖的执行效率,每每用于访问底层模块和构建有性能要求的算法。html
这两种场景看起来有较大的差别,大多数的时候能够各行其道。但仍是有不少时候会出现融合的状况。当咱们构建分布式系统的时候,因为RPC机制通常都是语言无关的,咱们大能够将其各尽所长,按需划分在最能发挥其长处的位置。然而,一旦咱们须要构建融合二者需求的集中式系统的时候,就会头痛无比。算法
此时,咱们可使用C++/CLI搭建C++和.Net之间的桥梁,C++/CLI是一个比较有意思的两栖模块,它具备以下特色分布式
使用C++/CLI,咱们可使用C++编写算法,用C#编写界面,也可使用.Net Framework类库加强C++程序功能,各取所长。关于的优势,园子里有篇文章介绍的比较详细,值得一读:从C++到C++/CLI。性能
下面咱们就以一个简单的例子来演示一下它的用法:spa
Calculator.h: htm
#pragma once
namespace CppCliTest
{
public ref class Calculator
{
public:
int Add(int a, int b);
};
} blog
Calculator.cpp 开发
#include "stdafx.h"
#include "Calculator.h"
namespace CppCliTest
{
int Calculator::Add(int a, int b)
{
return a + b;
}
} 文档
main.cpp get
#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原始的功能,这里用到的有:
具体的功能我将在后面的文章中再作介绍,MSDN中也有文档详细的介绍了这些语法:https://msdn.microsoft.com/zh-cn/library/ms235289.aspx
虽然C++/CLI同时具备二者的功能,但它使得本就比较复杂的C++语法变得更加复杂了(特别是初期的版本,很是复杂,如今已经简化了很多了),而且长期没有获得VisualStudio这宇宙第一IDE的较好支持(在VS2010的时候还不支持智能提示),是没法与拥有大量语法糖的C#比开发效率的。加上大多数需求场景能够经过分布式系统解决,这些都致使了它一直没有获得太多的关注。可是,微软仍是在积极的改进它的,加上C++11的支持,如今已经比以前好用多了,若是用在合适的位置,是绝对能让你的开发如鱼得水的。