C++
はじめに C++14, 17, 20 と規格が改定されていくにつれ、色々便利な機能が追加されています。 そのうちのいくつかは競プロであっても有用なのですが、特に最近始めた人のコードを読んでいるとほとんど使われておらずもったいないと感じることが多いです。 そ…
はじめに 本記事は C++11で始めるマルチスレッドプログラミングその1 ~std::thread事始め~ - すいバカ日誌 の続きとなる記事です(何年越しだよ). 今回は std:;mutex による基本的な排他制御について書きます. 本記事を書いた時点では C++17 がもう策定…
#include <iostream> #include <bitset> using namespace std; using ll = long long; int main() { ll a = 0, b = 0, c = 0; for(int i=0; i<32; ++i) { a |= (1 << i); } for(int i=0; i<32; ++i) { b |= (1ll << i); } c |= (1 << 31); cout << bitset<64>(a) << endl; cout </bitset></iostream>…
この記事は、C++11におけるマルチスレッドプログラミング入門記事という位置づけで書かれたものです。簡単のため、表現が曖昧になったりしている部分があると思いますが、もっと厳密に知りたいという方はC++の規格を参照してください。 C++11のマルチスレッ…
以下のコードを書いたとする. namespace foo { class bar { // ... private: // serialize の実装 }; BOOST_CLASS_VERSION(bar, 1); } すると、以下の様なエラーが大量に出てくる. error: 'foo::boost::**' has not been declaredどうやらこれはBOOST_CLASS_…
Twitterでこういうコードを見かけた。 #include <utility> namespace N { using namespace std; class C {}; void swap(C&, C&) {} void f() { int n1 = 1; int n2 = 2; swap(n1, n2); // compile Error } } int main() { N::f(); return 0; } これはコンパイルエラー</utility>…
コンパイルエラーになって欲しかったのにICEになりやがったのでバグレポ。 SFINAE 使ってたらなぜかバグりました。でも少し変えたら動くんですよねー。 詳細はリンク先を参照ください。 バグレポの書き方とか教えてもらえばよかったかなぁ…http://gcc.gnu.or…
Boost.Logはファイルに書き出せるわけですが、追記モードも可能です。 ついでに、自分で定義した severity を書きだす方法もどーぞ。 #include <boost/log/utility/setup/file.hpp> #include <boost/log/utility/setup/common_attributes.hpp> #include <boost/log/trivial.hpp> #include <boost/log/attributes.hpp> #include <boost/log/expressions.hpp> #include </boost/log/expressions.hpp></boost/log/attributes.hpp></boost/log/trivial.hpp></boost/log/utility/setup/common_attributes.hpp></boost/log/utility/setup/file.hpp>
復習第2弾。 universal reference って名前は知らなくていいので、C++のこれらの挙動だけは知っててほしいです。 前の記事と合わせてどうぞ。Universal Reference は以下 URefs と略させて頂きます。 URefs とオーバーロード class some_class { public: tem…
universal reference という文字が見えたけど聞いたことなかったのでまとめました。 知識としては皆さんご存知だと思いますので復習程度に見ていただければ幸いです。 知らなかった人はこの記事で入門しましょう! Scott Meyers氏による universal reference…
はじめに 寝屋川市の大阪電気通信大学でBoost.勉強会 #12 が開催されました。 僕は発表者として行きましたが、今回もC++erがたくさん集っていたようです。 ちなみに初参加だったので、少し緊張しました。発表の順番とかタイトル一覧はこちら Togetterのまと…
C++には lvalue やら rvalue やらたくさんありますが、混乱している人もいるかもしれないのでめちゃくちゃ簡単にまとめておきます。 多分間違ってるところがあると思うので、その時は教えて下さい。よろしくお願いします。 lvalue 簡単にいえば左辺にして代…
Variadic Templates Verで書いた。 struct error {}; template< bool B, typename ... Args > struct logical_and_; template< typename head, typename ... tail > struct logical_and_<false, head, tail...> { typedef mpl::false_ type; }; template< typename head, typename </false,>…
ちょっとハマったのでメモ。 ある日、以下の様なコードを書いてました。 typedef mpl::vector_c<int, 1, 2, 3> foo; typedef mpl::transform<foo, mpl::plus<_1, mpl::int_<1>>>::type bar; typedef mpl::vector_c<int, 2, 3, 4> expected; int main() { BOOST_STATIC_ASSERT(( std::is_same<bar, expected>::value )); } てっきり mpl::t</bar,></int,></foo,></int,>…
あけましておめでとうございます。今年もよろしくお願いします。さて、新年一発目の記事はタイトルにあるとおりです。 そのコードが以下になります。 //main.cc #include <contract.hpp> #include <boost/exception/all.hpp> #include <iostream> #include <fstream> class my_exception : public boost::exception, pub</fstream></iostream></boost/exception/all.hpp></contract.hpp>…
その1の続きです。 宣言と実装の分離 基本構文はだいたい押さえましたね。しかし、実際に使うとなると大事なことを忘れています。 このまま行くと「あれ?そういえば宣言と実装分けられないのかな?」となるのは確実です。 Boost.Contractではそれが可能です…
これは C++ Advent Calender 2012 の3日目の記事です。ーBoost.Contract 0.4.1が最新です。(2012/12/03現在) はい、契約だからってま○どマギネタとか出てくるんじゃないかなーって期待していたそこのアナタ!残念ながら使い回されすぎて使いにくいため、そ…
暇つぶしにネットサーフィンしてたらこんなのみつけたhttps://rx.codeplex.com/ #include <cpplinq/linq.hpp> #include <iostream> #include <vector> int main() { using namespace cpplinq; std::vector<int> v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; auto data_parsed = from( v ) .where( []( const</int></vector></iostream></cpplinq/linq.hpp>…
luabindを使うと、lua側でclassが使えるようになります。 こいつを、C++から使おうってのが今回の目的です。 -- hoge.lua function get_Hoge() local hoge = Hoge() return hoge end class 'Hoge' function Hoge:__init() print("Hoge construct") end funct…
先日、久しぶりにC++のコードを書くついでに環境を構築し直そうと、 Clang3.2とVimのプラグインを整えていざコードを書いている時の話です。*1(MinGWのgccは4.6.2)コンパイルが通らなかったので、エラーを見てみると次のようなものでした。 \MinGW\lib\gcc…
少し考えさせられたのでメモ。 class Hoge { public: void show() { std::cout << "Hello World" << std::endl; } }; int main() { std::shared_ptr<lua_State> l( lua_open(), []( lua_State* p ) { lua_close( p ); } ); luaL_openlibs( l.get() ); luaopen_base( l.g</lua_state>…