c++

コンパイラのAddressSanitizerを使ってバッファ オーバーフローを退治する

C言語やC++の欠点の一つは,バッファオーバーフローやオーバーランが起こりやすいことです.それは欠点であると同時にC/C++の利点であると言う人もいます.つまり,メモリ関連のチェックを省略することで,省略した分C/C++はオーバヘッドが少ない高速なプロ…

std::stringでprintfのような書式指定を行う方法 (C++11版)

C++11を使うと綺麗に実装できますまず format() というテンプレート関数を作ります.C++11で新しく導入された,可変引数テンプレート,および std::snprintf() を使います. #include <string> #include <cstdio> #include <vector> template <typename ... Args> std::string format(const std::string&</typename></vector></cstdio></string>…

class を noncopyable にする

c++

今時のc++ (c++11など)でコピー禁止,代入禁止のクラスを作る方法 template <class T> struct CRTPnoncopyable { CRTPnoncopyable() = default; CRTPnoncopyable(const CRTPnoncopyable&) = delete; CRTPnoncopyable& operator=(const CRTPnoncopyable &) = delete; </class>…

ポインタからクラス名を調べる方法

c++

c++で、ポインタからクラス名や型名を調べる処理は、以下の2ステップで実現できます typeid(obj).name() で型名の文字列を取る abi::__cxa_demangle() で demangle する サンプルコードは以下の通り #include <typeinfo> #include <cxxabi.h> #include <iostream> int main() { class MyCl</iostream></cxxabi.h></typeinfo>…

c++でプログレス・バーを表示する方法

boost の boost/progress.hpp を使えばOK #include <boost/progress.hpp> #include <boost/date_time/posix_time/posix_time.hpp> #include <boost/thread/thread.hpp> int main(int argc,char *argv[]) { const unsigned long expected_count=100; boost::progress_display show_progress( expected_count ); for(int i=0; i</boost/thread/thread.hpp></boost/date_time/posix_time/posix_time.hpp></boost/progress.hpp>

boost 1.50.0 移行メモ

boost-1.50.0 へ乗り換えました.移行方法をメモします. 1.50.0 での変更箇所 http://www.boost.org/users/history/version_1_50_0.html に一覧がありますが,機能追加・バグ修正・仕様変更と色々変わっています.特に大きな変更点としては,boost::filesys…