C++」カテゴリーアーカイブ

アリスはカンマとコンマを区別する

久々のアリプラシリーズです。 こっ…これは…! コードから…深い味わいが伝わってくる… クソコードのはずなのに… な…何故だ!? このクソみたいな見た目に反した、爽やかな口当たり… そうだ…解ったぞ…桑の実(operator ,)だ! …小癪な真似を… このコードを書いた奴は誰だぁっ!! — h.omae (@pigeon6) 2014, 3月 19 元のコードはc++なんですかね?と思って自分でコードを書いてみます。ええと、カンマ(コンマ)「,」演算子は、マクロでは使うけど演算子のオーバーロードをすると関数の引数とややこしくなるわけですが、「爽やかなコード」になるかどうかは分かりません。 確か、,演算子は優先度が一番低いから、そのあたりも含めて使うといいかも。 最後の式の値を返すので、zの値は20になりますね。そのあたりを利用したマクロが量産される訳ですが。バッドテクニックと言えなくもな … 続きを読む

カテゴリー: C++ | コメントする

[C++/CLI] モニタの解像度をプログラムから変更する

たまに C++/CLI の記事などを。Visual Studio 2012 からは C++/CLI もインテリセンスが使えるようになったので、C# と win api を媒介する C++/CLI のプログラミングもばっちりですね…って、2010 の時に出してほしかったよなぁ。ちなみに、2012 では C++/CLI でフォームアプリケーションが作れない(ことはないけど、テンプレートに入っていない)ので、そのままフェイドアウト…なのか? それとも C++/CX と融合するのかは謎なところです。 ■解像度とモニタを指定する 解像度自体は、ChangeDisplaySettingsEx 関数を使いますが、複数のモニタがある場合はデバイス名が必要にあんるので、あらかじめ EnumDisplayDevices で取得しておきます。 本来は、モニタのリストとかを取ればいいのです … 続きを読む

カテゴリー: C#, C++ | コメントする

[C++] NULLポインタアクセスをMFCはどのように回避して…いないか。

null/nil の扱いをオブジェクト指向的に考え直す | Moonmile Solutions Blog http://www.moonmile.net/blog/archives/3770 なところで、Objecitve-C の nil の「優れた」扱いについて書きましたが、実は MFC(Microsoft Foundation Class)にも NULL ポインタに対して「優れた」扱いをしているのです、という話をひとつ。 MFC ってのは、Windows アプリケーションを作る時のクラスライブラリで、似たようなものには Delphi のライブラリがあります。ウィンドウシステムを扱うときに、直接の Windows API を扱うよりもクラスを使ったほうがまとまりが良い、ってのが主旨ですね。これを押し進めたのが、Windows RT なんですが、またこれは別の機会に(というか、この話はあ … 続きを読む

カテゴリー: C++ | コメントする

null/nil の扱いをオブジェクト指向的に考え直す

Objective-C で nil のメソッドを実行すると例外が発生しないのは変…ではないよ、というのを解説。 ■そもそもの NULL の意味 C++ も Objective-C も C言語を発端としているので、「NULL」≒「値が無い状態」というのを継承しています。 御存じの通り、C言語では、NULL というのは(void*)0 あるいは 0 として定義されています。定義されているのですが、これが NULL という意味を示しているかどうかは別なのです…が、「現実主義的な」C言語としては、NULL = 0 のほうが都合が良かったわけですよ。 基本は NULL はポインタとして扱うので、0 ポインタ自体を「有効」にできないという矛盾があります。かつて、8bit 時代の CPU ではメモリが貴重だったので、0 ポインタを「無効」にするとはなんということかッ!!! という … 続きを読む

カテゴリー: C#, C++, Objective-C | 8件のコメント

[C++] そういえば auto の落とし穴を示しておくと

C++11 あたりから、つーか、VC++2008 でもあったような気がするのですが、C++ では C# の var のように auto が使えます。 VB.NET の dim が dim に変わったように、C++ の auto が auto に変わったわけですが、昔の auto を知らない方は、まあ、知らなくてもよいかと。事実上使わなかったし。 さて、C++ でも auto で型推論ができるようになった訳ですが、これにちょっと落とし穴があるってのを少し。 auto を何に使うかというと、最初は typedef の代わりですかね。よくやる std::vector<string>::iterator ってのを、var で書き直すと非常に楽になります。 こんな風に横に長いコードが という風に書けます。かつては、typedef をして というコードもあったのですが、これで無駄な typ … 続きを読む

カテゴリー: C++ | 4件のコメント

[C++]ATLで64bit版のCOMを作成する

Twitter / Marupeke_IKD: Windows7下でVisualStudio2005 … https://twitter.com/Marupeke_IKD/status/245237326995927040 なところで、「Windows7下でVisualStudio2005で64bitなATLをVC++で作って、それを同じくVS2005環境で64bitビルドなVBで使おうとして「参照の追加」をするのだけど」の部分が気になって、一応確認してみたという話を少し。 VB6 自体は、Windows 7 上では動かないので、 Windows 7 上の Visual Studio 2005 で 64bit の COM を作成 Windows XP(かな?)の VB6 で先の COM を参照 なところでしょう。「VB の参照設定に出てこない」というところは、ファイルを参照させ … 続きを読む

カテゴリー: C++ | コメントする

[C++] レガシーライブラリをクラスで包んで再利用する

手元にあるものがレガシー(遺産)と言う訳ではないのですが、15年程まえの技術で作ってあるので、これに機能を追加するのに苦労しています。 まあ、業務的には「元のコードスタイルに合わせてコーディングする」のが良い訳で、そこそこ手を加える量が少なければそれでも良いのですが、がっつりとコーディングしないといけないとなると、ひと苦労ってことになります。 そうなると、レガシーならばレガシーなりに捨て去ってしまう、というのもひとつの選択肢に上がるわけですが、現実的にはそうも言えません。予算的な問題とか、実現可能性の問題などがありもともとのコードを継承しないと駄目なわけです。COBOL やホストコンピュータの世界では普通に起こっている話で、ぼちぼち10年前のコード自体も辛くなってきていますよね、って話です。そういう分野の「考察」も必要かと思い始めていますが、そのあたりは別の機会に。 さて、既存のデータが「 … 続きを読む

カテゴリー: C++ | コメントする

[C++] HtmlDom のパース部分を C++ で書き直す

HtmlDom は LINQ to HTML を目指していますが、かつ HTML が楽に編集できるように更新系(Update/Delete/Insertなど)のメソッドも準備します。 まあ、内部的には XML に直しているので操作は楽なのですが、なんと HTML のパース部分がちと面倒で。 もともとある System.Forms.HtmlDocument 自体には、Children に相当するコレクションがないので、全 DOM を取ることができないんですよね。 HtmlDocument クラス (System.Windows.Forms) http://msdn.microsoft.com/ja-jp/library/system.windows.forms.htmldocument(v=vs.110).aspx トリッキーな作りをすれば、これに沿って LINQ ぐらいは作れるのですが、ち … 続きを読む

カテゴリー: C++ | 1件のコメント

[C++] 試しにデクリメント付きの bool 型を実装してみる

VC++2010 の bool 値の動きが、false -> true -> true なのだから、それに合わせてデクリメントを作ってみる。 内部的に、bool 値を持っているのは GAG というかなんというか、意外と詰まらないコードになってしまいました。 最初は b |= 1; b &= 0; なことをやるつもりだったのですが、実は 0/1 しか値を取らないのだから、直接 false/ture を入れてしまえば良いわけです。 ■結果

カテゴリー: C++ | コメントする

[C++] bool値をインクリメントすると、ture/false を繰り返す理由…をこじつける

bool値をインクリメントする……? – Togetter http://togetter.com/li/356718 c++ – bool operator ++ and — – Stack Overflow http://stackoverflow.com/questions/3450420/bool-operator-and 3.2 Increment and decrement [expr.pre.incr] 1 The operand of prefix ++ is modified by adding 1, or set to true if it is bool (this use is deprecated). The operand shall be a modifiable lvalue. The type of the … 続きを読む

カテゴリー: C++ | コメントする