初めてのC++/CLI

最近、すっかり遠のいているC++ですが、今回は結構変わったのでちょっと弄ってみようと思います。

#include "stdafx.h"

using namespace System;

// ネイティブなクラス
class NativeClass {
  std::string name;
public:
  NativeClass(const std::string& name) {
    this->name = name;
  }

  void SayHello() {
    std::cout << "Hello " << name << std::endl;  
  }
};

// マネージドなクラス
ref class ManagedClass {
  String^ name;
public:
  ManagedClass(String^ name) {
    this->name = name;
  }

  void SayHello() {
    Console::WriteLine("Hello {0}", name);
  }
};

int _tmain()
{
  // ネイティブヒープに生成
  NativeClass* pnc = new NativeClass("Native");
  NativeClass& rnc = *pnc;
  rnc.SayHello();

  // マネージドヒープに生成
  ManagedClass^ rmc = gcnew ManagedClass("Managed");
  rmc->SayHello();

  // ネイティブなポインタはNULLで初期化
  pnc = NULL;
  // マネージドな参照はnullptrで初期化
  rmc = nullptr;

  Console::ReadLine();
}

/* 結果
Hello Native
Hello Managed*/

VS2003までのManaged C++は__gcとかあからさまにMS独自拡張っぽくてソースコードが汚くなって嫌だったのですが、C++/CLIではキーワードがスッキリしてちょっと使う気になります。ポテンシャル的にはネイティブもマネージドもいけるC++が一番なんですけどね(^^;