ゆとりーなの日記

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

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>…