VC++

コンパイラを殺す方法

とてもくだらないことコンパイラを殺す方法です(VC++8.0で検証) 方法1.自分への参照用意するもの struct hoge { hoge& me() { return *this; } // 自分への参照を返す void hello() const { std::cout << "Hello" << std::endl; } }; それで、こう使います…

for each

東方算程譚 - うっそぉ〜ん! VC++8.0以降の独自言語拡張でfor eachがありますこれはC#のforeachと同様の走査ができます for eachがC++/CLI(/clrオプション)のみの 機能だと思っている人が多かったようですが、実は/clrオプションを使う必要はありません Nati…

どうしても.NET対応したいなら

こうするのがいいと思うんだ 画面はC#でWindowsフォーム +実装はC++/CLIでMFC(CWinFormsDialogクラス使用) ただ、C++/CLIを使うとスタティックリンクができません MFC::CWinFormsDialog クラスMFC ダイアログ ボックスとしての Windows フォーム ユーザー コ…

メタ関数

VC++8.0以降には内にメタ関数がいくつか定義されています std::_If(boost::mpl::if_c相当のもの) #include <iostream> int main() { std::_If<sizeof(int) == 4, int, long>::_Result value = 30; std::cout << typeid(value).name() << std::endl; return 0; } boost::mpl::if_cを使った場合 #inclu</sizeof(int)></iostream>…

TR1のカケラ

Visual Studio 2008 Beta 2のVC++9.0で stdネームスペース内をインテリセンスで眺めてたらtr1ネームスペースを発見! でも、できるのはこれだけでした #include <iostream> int main() { std::cout << std::tr1::hexfloat << 3.14 << std::endl; return 0; } マイナー</iostream>…

MFC/ATL - 文字列フォーマット

型安全じゃないとか言っていても、それでも便利な文字列フォーマット関数 なんでCString::Formatがstaticメンバじゃないんだろう? inline CString FormatString(LPCTSTR szFormat, ...) { CString strFmt; va_list argList; va_start(argList, szFormat); s…

MFC/ATL - std::stringとstd::wstringの相互変換

意外に知られてないのかもしれないのでやっておきます。 #include <string> #include <atlbase.h> #include <atlconv.h> // std::wstring → std::string inline std::string ToMultStr(const std::wstring &strWide) { USES_CONVERSION; return W2A(strWide.c_str()); } // std::string → s</atlconv.h></atlbase.h></string>…

VC++8.0のバグ発見

MFC/ATLで共有されているCOleDateTimeクラス COleDateTime::GetCurrentTime().Format(_T("%Y年%m月%d日")); これをVC++8.0で動かすと空文字が返ってきてしまいますちなみにVC++6.0ではちゃんと「2007年07月12日」と返ってきます COleDateTime::GetCurrentTim…

MFC - std::stringとCStringの相互変換

誰でも知ってると思うけど念のため ・CString → std::string CString cstr; std::string astr = static_cast(cstr); ・std::string → CString std::string astr; CString cstr = astr.c_str(); ※ Unicode環境ではstd::stringをstd::wstringに置き換えるもし…