C++

ヘッダファイルでの定義と分割コンパイル

ヘッダファイルに関数などの(宣言ではなく)定義を記述している場合の,分割コンパイルを行ったときの挙動をイマイチ把握していなかったので整理してみました.C/C++ では,多重定義エラーを防ぐために,ヘッダファイルを記述するときにはインクルードガー…

char から int へのキャスト時の問題

コメント - CLX C++ Libraries の動作確認 への対応.コメントで,以下のソースコードでうまく encode/decode されないと言う指摘がありました(ソースコードは若干改変). #include <iostream> #include <string> #include "clx/uri.h" int main() { std::string dest = clx:</string></iostream>…

CLX C++ Libraries の動作確認

デバッグとかテストの話を見かけたので,CLX C++ Libraries の普段の動作確認の方法をメモ.動作確認と言ってますが,修正(または新規作成)したライブラリ以外はコンパイルが通るかどうかしか見ていませんzzZ新しいライブラリを作成した場合,そのライブラ…

エンディアンを考慮したメモリコピー

blog をもう少しコンスタントに更新して行きたいなぁと言う事で,メモ代わり感覚で更新していきます.http://sourceforge.jp/tracker/index.php?func=detail&aid=15209&group_id=3652&atid=13543 の指摘を受けて.これに関わらず,多バイト長の変数(or その…

reserve と resize

すぐに忘れるのでメモ.std::vector には reserve() メソッドと resize() が存在しますが,これらのメソッドと size() の関連があやふやだったのでテストをしてみました. #include <vector> #include <iostream> int main(int argc, char* argv[]) { // TEST 1: コンストラク</iostream></vector>…

C++/CLI 文字列キャスト

最近 C++/CLI を弄っているのですが,GUI 以外の部分は通常の C++ で記述しているので,どうしても System::String^ と std::string (, or std::wstring) の相互変換が必要になります.ぐぐって見たところ同様の要望は多いようで,各所で解決方法も記載され…

文字列の16進数ダンプ

文字列を 16 進数でダンプする関数が必要になりそうなので作成しました.入力/出力用のイテレータを引数に指定すると,入力から1文字ずつ読み込み,16進数の文字列として出力します.ただ,この関数を使用する場合 hexdump<char>(src.begin(), src.end(), dest) の</char>…

ローカルホストの IP アドレス取得方法

プログラムから自ホストの IP アドレスを取得する必要があったので調べてみました. 3.3 - Winsock プログラム で自分の IP アドレスを取得する方法は?3種類の方法があり、それぞれに利点、欠点があります: 最も簡単な方法は、connect 済みのソケットに対し…

コンストラクタと例外

C++ のコンストラクタで例外が発生するとそのクラスのデストラクタが呼び出されず,メモリリークの原因となり兼ねないのでコンストラクタでは例外を発生させてはならない,と言う話があります.これに関しては [迷信] コンストラクタから例外を送出してはな…

OpenSSLとselect

OpenSSL を使用しているときに複数のソケットの入力状況を管理する場合,通常の socket と同じように select や epoll を用いて制御を行うとうまくいかないときがあります. SSL のような暗号通信の場合、送信は「垂れ流し」では済まず、ハンドシェークを行…

Hello, OpenSSL!

SSL 通信用のライブラリを追加しようと少し調べたところ,OpenSSL ライブラリを使うのがやはり王道っぽいので OpenSSL を使って実装してみました. gcc gcc を使う環境 (Linux, cygwin, ...) だと大抵の場合は最初からインストールされているようです.ない…

strptime の実装

文字列から日付・時刻の構造体 (struct tm) への変換にはこれまで strptime() を用いていたのですが,この関数は Windows には存在しないようです.なので,strptime() 相当のものを独自に実装して Windows でコンパイルする際には代替関数を使うようにして…

ワイド文字とcodecvt

Rubyなどのスクリプト言語に比べてC++がしんどい部分の一つに,ワイド文字(utf-?)があります.ただ,コンパイラ屋も頑張っているようで,Visual Studio 2005だとC++標準のナロー文字<->ワイド文字変換クラスであるstd::codecvt<wchar_t, char, mbstate_t>が結構まともに動きました.そ</wchar_t,>…

頻出文字カウントプログラム

C++での単語の出現頻度順に出力するプログラムで,ちょっと躓いた部分があったのでWebを眺めていると,どう書く?orgβ:コード中の文字の頻度分析と言うページを見つけました.面白そうだったので,私もC++でどこまで短く書けるか挑戦.“頻出単語”だとちょっ…

マルチプラットフォームなスレッドクラス

pthreadとwin32 threadのインターフェースを統一したライブラリです.インターフェースおよびpthread側の実装はboost::threadベース,win32 thread側の実装はいろいろなWebサイトを参考に行いました*1.実装したものは,thread,mutex (mutex, recursive_mut…

ICMPパケットを利用したパケット間隔ベースの帯域計測方法

今日は,少し真面目な帯域計測方法について. スループットが100Mbps出るとは? スループットが100Mbps出るとは,(1個のデータパケットのサイズが1,500Byteの場合)1秒間にパケットを533,333個(100M / (1,500 * 8))受信できることを意味しますが,これを2…

手抜きPINGプログラム

現在,ICMPパケットを扱うソケットクラスを作成しているのですが,そのテストプログラムとしてPINGっぽいプログラムを作成したところ,正常に動作したので取り合えず公開してみます.bkブログ: シンプル=バッドシグナル説と言う記事があったので,シンプル…

ネットワーク帯域計測プログラム

複数のソケットの入力状況を管理するクラス,つまりselect()のラッパクラスを数年前に作成したのですが使用感がイマイチだなと思って没にしたままだったので,書き直してsockmanagerと言うクラス名でCLXに入れました.最初に通信が発生したときに呼び出す関…

streambufのカスタマイズ

ネットワーク関連のライブラリでsockstreamだけ良く分からないまま放置していたので,真面目に調べてみました.ソケットを介したデータ通信をC++のiostream(std::cinとかstd::cout)のインターフェースで行おうとするとbasic_streambuf<Ch, Tr>をカスタマイズするこ</ch,>…

文字列リテラルとポインタ

C/C++のポインタの機能--変数の場所(アドレス)という記事が一時お祭り状態になっていたようです.内容云々に関しては様々な人が指摘しているので置いておいて,今回はポインタ関連で理解に時間がかかった事例を一つ紹介してみようと思います. // sample1 …

マルチプラットフォームなソケットクラスの実装に関する覚書

2,3年前に初めてsocket関連のシステムコールのラッパクラスをC++で作成してその後何度か修正を加えていたのですが,ようやく完成かなと思える位になったのでこれまでの修正の覚書として,socketクラスの実装時の注意事項を何点か記述します.マルチプラット…

拡張 lexical_cast

C++で数字文字列数値の変換を行うときには専らlexical_castを使っているのですが, 16進数や8進数などに変換できないことに気づきました. そこで,strtolなどの関数を見てみるとbaseと言う引数で基数を指定できるように なっていたので,これに習ってlexica…

String Algorithm

プログラムを書いていると,ちょっとした文字列操作が必要になる場合が多々あるのですが,C++だと若干の不便さを感じます.Boostを使っても良いのですが,せっかくなので一通りの文字列操作関数を記述してみました.実装する機能および関数名は,Rubyを参考…

階層的CSSコンバータ

CSSの記述テクニック 階層宣言コーディングから.エイプリルフールネタを掘り起こすのはどうかとも思いましたが,意外と便利そうな記述方法でしたので,コンバータを記述してみました.以下が,階層的CSSを解析するためのクラスのプロトタイプ宣言. namespa…

Stream Iterator

しばしば,実験データから何らかの統計値(平均,分散,...)を求めたい場合があります.今回も,RMSE(Root Mean Square Error:平均2乗平方根誤差)を求めなければならない場面に遭遇しました.それで,せっかくなので汎用的に使える関数として残しておこ…

privateアクセス

C++(JavaやC#などにもありますが)には,アクセス制御を行うための予約語が用意されています. アクセス制御 public, protected, private クラスメンバと継承のアクセス制御に用いられる。 publicはクラスの外部からも自由にアクセスできる。 protectedは宣…

Streambuf Iterator

プログラミング関係の話題を取り上げるとき,しばしばサンプルコードを載せることがある訳ですが,このときに問題になるのがタグ文字などの特殊文字.具体的には,“<”,“>”,“&”,“"”はそれぞれ“&lt;”,“&gt;”,“&amp;”,“&quot;”に変換する必要があります.…