備忘録として書きとめておきます。 C++であれば、構造体をはじめとしたクラスを代入できないようにするのは簡単です。しかし、Cでも代入できない構造体を作りたくなることがときどきあります。特定の関数またはマクロを使ってコピーしないといけないようなものがそうで、そうした構造体を代入演算子を使って代入すると破綻してしまいます。そこで代入演算子で代入しようとするとコンパイルエラーにできる方法がほしいわけです。 次のように、幅0のビットフィールドをconst修飾子付きで持たせてあげると代入できなくなります。
ベターCをテーマとして採り上げるからには、そもそもベターCとは何なのかを明らかにしておかなければなりません。「ベターC」というのは文字通り"より良いC"のことですが、正式な呼称でもなければ明確な定義があるわけでもありません。何をもって"より良い"とするのかも意見が分かれるところでしょう。 このように、「ベターC」というのは非常にあいまいな概念なのですが、それでも大きく分ければ次のどれかに当てはまるのではないかと思います。 C++コンパイラを使ってCとまったく同じように書くことができるスタイル Cの知識しかないプログラマでも、わずかな説明さえあれば書くことができるスタイル C++からオブジェクト指向プログラミングやジェネリックプログラミングを除外したスタイル Cの言語機能のうち、問題を起こしそうな機能の利用を制限したスタイル C++の言語機能を活用したいが結果的にできていないことを自虐的に語
久々に凶悪なマクロプログラムを作ってみました。今回のネタは、GCCの拡張機能を使ってSTLもどきを作るというものです。この類の試みはいろいろなところで行われていると思いますが、その多くはコンテナに関するものだと思います。そこで、今回はアルゴリズム関数に挑戦してみました。 といっても、初回からそんなに高機能を目指すと挫折しますので、まずは反復子として使えるのはポインタに限定することにしました。他の反復子を扱うための手法については、いずれ機会を改めて紹介できればと思います。 今回作ってみたのは、find 関数と find_if 関数です。使い方はSTLのそれとほぼ同じなので、とくに説明はいらないでしょう。Cでは等価演算子の多重定義ができないので、スカラ型以外は find_if 関数を使うことになります。ここは、(等価演算子の多重定義に代わる方法を見つけるために)無理をして頑張るより、この方針の
Account Suspended This Account Has Been Suspended
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く