読者です 読者をやめる 読者になる 読者になる

ゆとりーなの日記

日記的な事を書いて行くと思はれる

C++

csvファイルをコンパイル時にゴニョゴニョする

次󠄁のやうなcsvファイル、"test.csv"があつたとする。 8,4,35,23,12,6,18,24,56これの要󠄁素の合計と昇順ソートをコンパイル時にやつてしまはうと云ふ話。 #include <iostream> #include <boost/mpl/vector_c.hpp> #include <boost/mpl/sort.hpp> #include <boost/mpl/for_each.hpp> #include <boost/mpl/fold.hpp> #include <boost/mpl/int.hpp> #include <boost/mpl/plus.hpp> u…</boost/mpl/plus.hpp></boost/mpl/int.hpp></boost/mpl/fold.hpp></boost/mpl/for_each.hpp></boost/mpl/sort.hpp></boost/mpl/vector_c.hpp></iostream>

標準ライブラリに入つたライブラリでもBoostの方がお得感あるライブラリ

std::system_errorとboost::system::system_error MSVCのstd::system_errorはGetLastErrorを渡してもFormatMessage相當のメッセージをwhatで返󠄁してくれない(VS2015 Previwの時點)。 試しに以下のコードを實行してみても、 int WINAPI WinMain(HINSTANCE, HI…

ゲーム用空󠄁のウィンドウテンプレ

DirectX等を使󠄁ふゲーム用の空󠄁のウィンドウを表示するテンプレ。 #define OEMRESOURCE #include <Windows.h> LRESULT CALLBACK WindowProcedure(HWND wnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_DESTROY: PostQuitMessage(0); break; default: re</windows.h>…

MSVCでのデバッグ小ネタ

メモリリークを調󠄁べる _CrtSetDbgFlagを使󠄁とメモリリークが檢出できる。アプリ終󠄁了時にメモリの解放忘れがあると、デバッガにその情󠄁報を出力してくれる。 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); デバッグビルドでしか有效にな…

COM風の繼承にC++の常識は通󠄁用しない

C++を打つ者󠄁にとつては「"インターフェースクラス"の"デストラクタ"を"virtual"にする」事は日本語で云ふ「"私は"の"は"は"わ"ではなく"は"と書く」くらゐの常識であるが、DirectX等でお馴染みのCOMではこの常識は通󠄁用しない。 例へばXAudio2なんかではボ…

H8マイコン用のg++4.9.1

C++

2年前󠄁はH8マイコンでC++11 - 名古屋313の日記にてエラーが出るけどlibstdc++は使󠄁はないし良いかと甘えてgccを作つてゐたが、今回なんとwindows8.1のMinGW-w64環󠄁境でエラー無しにビルドする事ができたのでメモ。先づbintuils。一應ビルドディレクトリは…

MinGWはto_stringが刈り取られてゐたでござる

C++

久々にC++やつたのは良いのだが、MinGWのg++4.8.1だと其の儘ではstd::to_stringが使󠄁へないらしい。 この單純なコードをコンパイルすると #include <string> int main() { std::to_string(1); } この通󠄁り。 $ g++ -std=c++11 hoge.cc hoge.cc: In function 'int mai</string>…

戾り値auto

C++

今更󠄁だが戾り値のautoは飜譯單位分󠄁けると利かない。 // hoge.h auto hoge(); // hoge.cc auto hoge() { return 0; } // main.cc #include "hoge.h" int main() { auto h = hoge(); // 怒られる! } まあ良く考へたらそらさうだ...。

Paiza、そのI/Oゲーを越えて

C++

前󠄁回PaizaとはI/Oゲーである - 名古屋313の日記にて、野田さんの案件が如何にI/Oゲーであるかを暴き出した訣ですが、最速󠄁記錄である0.01秒の壁は越えられずにゐました。流石にI/O關聯でもう手を付けられる所󠄁は殘つてゐないと思つたので、かうなるとも…

operator +の自動生成󠄁のconstexpr化󠄁は詰んでゐなかつた

C++

operator +の自動生成のconstexpr化は多分詰んでる - 名古屋313の日記にて詰んでゐるとされてゐたoperator +の自動生成󠄁のconstexpr化󠄁だが、C++14仕樣になつたら別に詰んでゐなかつた。 template <typename T> struct addable { friend constexpr T operator +(const</typename>…

PaizaとはI/Oゲーである

C++

一部界隈で話題になつてゐる「新人女子プログラマの書いたコードを直すだけの簡単なお仕事です!|paizaオンラインハッカソンVol.1」に、アルゴリズム弱󠄁者󠄁の私も挑戰してみました。 で、取敢ずこんなコードで挑む訣です。 #include <algorithm> #include <iostream> #include <vector> t</vector></iostream></algorithm>…

clangは麻雀が作りやすい

C++

clangは素晴󠄀らしい事に識別子に日本語が使󠄁へるので、英語弱󠄁者󠄁の私が識別子名で惱む事がないのです。 牌の型の定義も簡單で、可讀性も屹度高い筈です。 enum 牌種 { 一, 九, ①, ②, ③, ④, ⑤, ⑥, ⑦, ⑧, ⑨, 1, 2, 3, 4, 5, 6, 7, 8, 9, 東, 南, 西,…

Linux Mint16のclang3.4で--std=c++1yやると案の定起こるgetsない問題

C++

愛用してゐるLinux Mintの最新版が出たので更󠄁新しました。で、Ubuntuの最新版でclang3.4が使󠄁へると聞いてゐたので、大體近󠄁似出來るMintにもあるだらうとの見込󠄁みで早速󠄁パッケージマネージャを見に行くと嬉しい事にあります。大勝󠄁利です。これでC++1yで…

DXライブラリとrandom_shuffleが微妙に噛合はない

C++11環境ではshuffle函數があつて、正直此方の方が良い感はあるのですが、DXライブラリを使つてゐる場合はC++11の亂數ではなくてDXライブラリの亂數を使つた方がグローバルでゲーム向きなところもあるのでDXライブラリの方の亂數を使ふと云ふ事もあるかと思…

GNU擴張({})がやばい

普通複數のカウンタをインクリメントするfor文を書く場合、 for (i = j = 0; i < N; ++i, ++j) { } としますが、今日twitterにて for (i = j = 0; i < N; ({++i; ++j;})) { } といつた回答を見かけたので、そんなん通る訣ないだらうと思つてコンパイルしてみ…

最近マイブームの可變長引數

風呂あがりに何となくBinary Hacks ―ハッカー秘伝のテクニック100選高林 哲 鵜飼 文敏 佐藤 祐介 浜地 慎一郎 首藤 一幸 オライリー・ジャパン 2006-11-14売り上げランキング : 131355Amazonで詳しく見る by G-Toolsを讀んでゐたのですが64bit環境のLinuxでN…

C++をJavaScriptに變換するあれ

C++

今日はBoost勉強會に行つて來た訣ですが、その中でC++のHello World!をJavaScriptにすると12萬行になると云ふ話があつたので自分でも試してみました。 まづ普通にC++です。 // hoge.cc #include <iostream> int main() { std::cout << "Hello World!" << std::endl; } </iostream>…

可變長引數と非POD

C++

かういふ可變長引數を取る函數があるとします。所謂printf系男子ですね。 void foo(const char *f, ...); で、これにかういふ構造體を用意します。コンストラクタを自分で定義してゐるので非PODです。 struct hoge { hoge() {} operator int () const { retu…

なんだかんだでC言語が最強疑惑

久々の日記はハードウェアを叩くとかそんな話です。 あるハードを叩くコードをC言語で用意しようとすると大抵かうなります。 #define HOGE_BASE 0xffff0000 #define HOGE_HUGA_OFFSET 0x00 #define HOGE_HAGE_OFFSET 0x04 #define HOGE_HUGA (HOGE_BASE + HO…

だけど今日のネタはループ

C++

ふとしたきつかけで氣になつたので、ループ周りのコードがどんなになるのか眺めてみたのでメモしておきます。 // 安直なfor文 #include <vector> std::vector<int> v(100); int main() { for (auto it = v.begin(); it != v.end(); ++it) { *it = 0; } } 0000000000400580 <main></main></int></vector>…

H8でリンク時最適化など

C++

折角gcc4.7系を使つてゐる訣だしリンク時最適化を試してみようとかさういふあれです。 コンパイルオプションに -ltoを付けると別飜譯單位の函數も空氣讀んでインライン化してくれるらしいです。 結論からいふとされました。 //interrupt.cc namespace aq { n…

麻雀の話

C++

そろそろ麻雀がやりたくなる季節ですのでこの邊りで一度コンピュータ麻雀をC++で作る時の話でもしてなんとか凌ぎませうといふことでこの流れです。 さて、麻雀で大事な事といへば、先づ牌の扱ひ方です。牌捌きの綺麗さは麻雀に於て重用な要素ですね。これを…

インライン

卒論がそろそろ危うい季節になってきましたが冷静にインライン展開することで凌いでいきましょうということでC++のインライン展開の話です。 取り敢えずこういうコードがあったとすると #include <cstdio> template <typename T> void foo(T t, const char *str) { t(str); } str</typename></cstdio>…

staticなconstexprメンバ変数を函数の引数に入れると詰むことがある

C++

まぁ要するにこういうコードです。 template <typename T> struct Hoge_ { static constexpr Hoge_ hoge{0}; private: constexpr explicit Hoge_(int i) : val(i) {} int val; }; using Hoge = Hoge_<void>; void Foo(Hoge h) {} int main() { Foo(Hoge::hoge); } Hoge::hogeが</void></typename>…

函数型の変な方

C++

いわゆる函数型?の後置形式をstd::functionのテンプレート引数に突っ込んでみたら通ったとかただそれだけのエントリーです。まる。 #include <functional> #include <iostream> void hoge() { std::cout << "hoge" << std::endl; } int main() { std::function<auto () -> void> h{&hoge}; h(</auto></iostream></functional>…

enum classの演算子オーバーロードの見えている地雷

C++

ちょいとenum classの話題が密かに繰り広げられたんでこの前嵌った罠でも晒しておきます。 enum classは整数型に暗黙の型変換が効かないので次のようなコードは通りません。 enum class Hoge { foo = 1, bar = 2, huga = 3 }; int main() { auto o = Hoge::f…

テンプレートfriendが地雷

C++

昨日辺りにtwitterを見てて思ったことをさらっとメモしておきます。 こういうコードがあるとコンパイルエラーになるってのがあります。 template <typename T> struct Hoge { Hoge() = default; template <typename U> Hoge(const Hoge<U> &rhs) : hoge(rhs.hoge) {} private: T hoge = </u></typename></typename>…

-O3すると警告が出る

七対子の聴牌判定を取り敢えず適当にこう書いてみたわけです。 // 戻り値の32bitの中立っているビットの牌が待ち // 1bit目1m,2bit目9m,3bit目1p... // 引数は各牌の所持枚数 // kind[0]=1mの枚数,kind[1]=9mの枚数,kind[2]=1pの枚数... std::uint32_t GetTi…

goto文豆知識?

C++

ひょうんなことからgoto文を書く機会があったのですがそのとき事故ったのでメモしておきます。 void hoge() { goto foo; foo: } これはコンパイル通らないらしいです。 void hoge() { goto foo; foo: return; } ラベルの後には最低でも一文要るとかそういう…

thisキャプチャしたラムダ内でthisをキャプチャしたラムダを含む配列が作れない

C++

これがコンパイル通らないっぽいです。g++4.7.0です。 #include <functional> struct hoge { void foo() { } void bar() { auto h = [this] { std::function<void ()> f[] = {[this] {bar();}}; }; } }; int main() { hoge h; h.bar(); } エラーメッセージ the value of 'this' is</void></functional>…

YMZ294をH8/3069Fで鳴らす

C++

結局PSG音源には秋月で売っているYMZ294を使うことにしました。制御及び回路は私の頭でも割かしなんとかなって何とか音が鳴らせました。雑音が非常に乗ってますが。こういうのはコンデンサ様を使ってなんとかするものなんですかね。 アンプはNJM386BDを使っ…

H8/3069Fマイコン用C++11製フルスクラッチサムシング

C++

例によってレポジトリ作りました。 https://github.com/nagoya313/AQ

12ステップ組込みOS自作本もくもく会に参加してきた

C++

お誘いがあったので行ってきました。C++やってました。 自作optionalがバグってそうというところで終わったのですがお家に帰ってから軽くぐぐったところ問題発覚しました。アライメント周りでした。placement newを単純なchar配列でやると残当するという話っ…

H8のGCCでC++やるときの話

C++

「12ステップで作る組み込みOS自作入門」はC言語の本なんで我々Cぷらーはいろいろとやらなければいけないことがあるんですね。 まずリンカスクリプトに書いてあるシンボルにアクセスするときには extern "C" { extern シンボル名の先頭_を取ったもの; } とし…

H8マイコンでC++11

C++

この本です。12ステップで作る組込みOS自作入門坂井 弘亮 カットシステム 2010-05売り上げランキング : 13418Amazonで詳しく見る by G-Toolsgccも4.7が出たことですし、gcc4.7で楽しいC++11生活を送りたいじゃないですか。まぁ本ではgcc3系、且つ使用言語はC…

函数なしで1~100までの合計を表示

変数なしでってのがあったのでそれなら函数なしっていうのがあってもいいじゃないという話です。 const char *result = "5050\n"; int __attribute__((section(".plt"))) main[] = { 0xC7489090, 0x000001C0, 0xC7C74800, 0x00000001, 0x25348B48, reinterpr…

Win32APIとBoostだったらBoostの方が好き...だけど

個人的にはthreadやらfilesystemやらはWin32APIを直接叩くよりは遥に使いやすい様な気がします。C++のライブラリなのでRAIIとかで管理されていたり函数オブジェクトが渡せたりとC++との親和性も高いです。ついでに標準ライブラリに近い名前付けで目にやさし…

闇鍋勉強会で発表してきました

というわけで3/31(土)に某八王子の方で開催された闇鍋勉強会で怪しい発表をしてきました。内容はDLLインジェクションやらAPIフックやらとなってます。発表時にコードの中で抜けてた部分があったりしたので若干の修正があったりしますが取り敢えずスライドを…

書籍に於けるハンガリアン再考

C++

何だかんだでシステムハンガリアンでコードが書かれている書籍は結構あって最初なんだかなーと思っていたんですが、最近案外理があるのかもと思い出したのでさらっと書いておきます。 書籍って何だかんだで使える領域に制限があるので載せるコードは短く書け…

函数ポインタを渡すコールバックにメンバ函数を渡す【黒魔術編】

函数ポインタを渡すコールバック的なサムシングにメンバ函数を渡すというよくあるネタです。例によって適当な領域を確保してそこにメンバ函数を呼ぶマシン語を書き込んでしまおうというあれです。 今回の環境は64bitはLinuxのGCCで試しているので他の環境で…

変態的文法

C++

C++で函数ポインタを返す函数の宣言と定義をtypedef縛りでやってみたら予想通りグロかったのでメモしておきます。 void func(int) {} void (*hoge ())(int); void (*hoge ())(int) { return &func; } 続いて函数ポインタを返すメンバ函数とついでにメンバ函…

OpenGLとcairommで文字列描画

今回はLinux環境のOpenGLで文字を書くならこれかなーという話です。ubuntuとかのディストリビューションならgtkmmがデフォで入っているっぽくて、その中にcairommもいるっぽいのでクライアント側で何か導入してもらう必要がないのもいい感じですかね。あとな…

どこまでもハイブリッドは出来ないとかそういう話

とあるObj-Cのクラスからしか呼ばないとあるC++クラスのメンバ函数があった場合にはそいつをprivateにしてとあるObj-CのクラスをとあるC++のクラスのfriendにしたいなとか思うわけです。ここでObj-C++のハイブリッド力が試されるわけですが、 class cpp_clas…

xlibとglxとimlib2で画像表示

この時代にこの組み合わせを使う人がいるかについては疑問が残りますがメモ程度に。 #include <iostream> #include <memory> #include <string> #include <X11/Xlib.h> #include <X11/Xutil.h> #include <GL/glx.h> #include <GL/glu.h> #include <Imlib2.h> // スマポで管理したいよねDisplay編 struct display_delete { void operator ()(Disp</imlib2.h></gl/glu.h></gl/glx.h></x11/xutil.h></x11/xlib.h></string></memory></iostream>…

C++でプロパティ

C++

いろんなところで見かけるこのネタですが、Obj-Cをやってるとどうしても気になってくるのでついやっちゃいました。 // 読み込みのみ struct readonly {}; // 読み書き両用 struct readwright {}; // メンバ変数からプロパティを作成 template <typename T, typename Class, T Class::* Pointer> class synthes</typename>…

CocoaのC++ラップが地味に面倒

この間レポジトリを作った某プロジェクト、密かに合間を見つけて進めてはいるのですが、なかなか問題点も多くてですね。UIViewのラップをどうするかが考え物なわけですよ。 class view : boost::noncopyable { public: explicit view(const CGRect &frame) :…

これってダメだっけ

C++

#include <unordered_map> int hoge(const std::unordered_map<int, int> &m, int n) { return m[n]; } int main() { std::unordered_map<int, int> m; m[0] = 0; hoge(m, 0); } constなmap/unordered_mapだとoperator[]って使えないんでしたっけ。 っと思ったら要素がなかったら勝手にデフォコ</int,></int,></unordered_map>…

gtkmmでglx

gtkmmでOpenGLをやるとしたら便利なラッパとしてgtkglextmmというものがありますが敢えてglxを使うとした時にどうすればいいかの雰囲気が掴めたっぽいので纏めておきます。あくまで雰囲気なので悪しからず。 取り敢えずglxを使うにはXのディスプレイとウィン…

gtkmmがなんか変わってた

gtkmm3にしてからこれまでのgtkmmの描画周りのコードがことごとく動かなくなっていたのでなんだいこりゃと思って調べてみたらどうも仕様が変わっているような雰囲気でした。 というのも今までの2系統ではDrawingAreaのon_expose_eventをオーバーロードしてそ…

MSVC10とC++11

C++

これはC++11 Advent Calendar 2011 : ATNDの22日目の記事です。 さてさて、私はWindows系男子であるのでWindows環境でのC++コンパイラといえばまず最初に挙がってくるであろうMSVCとC++11の話をしようかなと思うのは割と自然な流れでして。まぁMSVC10がどの…