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的支持,如今已經比以前好用多了,若是用在合適的位置,是絕對能讓你的開發如魚得水的。