C++に関するDOSEIのブックマーク (37)

  • はてなブログ | 無料ブログを作成しよう

    「遊び」をクリエイトするAI デスピサロを相手に、効くはずのないザラキを唱えまくるクリフトを見ながら、AIというのはなんてアホなのだろうと思った。多分、それが、僕が初めてAIに出会った瞬間だったと思うのだけど、時は過ぎ、現代では生成AIを中心とした「かしこいAI」たちが世に溢れていて、…

    はてなブログ | 無料ブログを作成しよう
    DOSEI
    DOSEI 2015/05/01
  • C++ tutorial texts for CV students

    CV 研究室学部生のための C++ チュートリアル資料 はじめに 情報工学の研究室の学生, 特にコンピュータビジョンを研究しているでは, OpenCV などのライブラリを使う機会が増える. 現在多くのライブラリは, C++ をベースにかかれているため, 使いこなすにはある程度の C++ プログラミング能力が必要である. 例えば OpenCV CookBook の例示コードは, C++ の知識がないと理解は難しい. しかし, 現実はそんなに甘くなく, 大学では C 言語しか教えていなかったり, 研究室配属の 4 年生となると, 院試や就活, 不慣れな輪講, 卒業研究などで忙しく, 自分でを読んで勉強するのも難しいという人もいるだろう. 特に, 市販の教科書は C++ の目玉機能であるオブジェクト指向に関する機能の解説にページを割いており, 頑張って読んでみても傷気味になってしまい, 実際

  • たまには std::valarray のことも思い出してあげよう - ny23の日記

    多クラス分類器をカーネル化してみたら,訓練速度が劇的に低下してガックリしたので,手持ちの二値分類器に多クラス分類器を追加実装してみた(というより,もともとそのつもりで多クラス分類器を実装していた,という方が正しいかも).その際,コードの肥大化を抑えるため,可能な限り二値分類器(素性の重みは double)とコードを共有しようと,素性の重みに演算子がオーバーロードされている std::valarray (std::valarray ) を使ったら,多値分類器用のコードをほとんど書かなくて済んで非常に楽だった.std::valarray 便利過ぎる.今までその存在自体は知ってはいたものの, std::vector で充分という場面がほとんどで使うことがなかったが,今回の用途には完璧に嵌った. と,std::valarray の便利さに感心する一方で,あっちこっちで std::valarray

    たまには std::valarray のことも思い出してあげよう - ny23の日記
    DOSEI
    DOSEI 2012/05/18
  • Cのコールバック関数をC++のメンバ関数にバインディングする方法 - kazuhoのメモ置き場

    たとえば libevent のような C 言語でかかれたイベント駆動型のライブラリを C++ から使っていると、C++ のメンバ関数をコールバックとしてセットできたらうれしいことが多いですよね。以下のようにすればできます。 たとえば、コールバック関数をセットする関数の型が、 void set_foo_callback(void (*)(void* cb_arg), void* cb_arg); なら、以下のようにクラスとメンバ関数を引数にとるテンプレート関数を定義し、 template <typename T, void (T::*FUNC)()> void to_foo_callback(void* cb_arg) { T* obj = reinterpret_cast<T*>(cb_arg); (obj->*FUNC)(); }以下のように受け渡せばいい。 class K { publ

    Cのコールバック関数をC++のメンバ関数にバインディングする方法 - kazuhoのメモ置き場
  • エラー処理を書いてはいけない - Preferred Networks Research & Development

    昨日セミナーとして USTREAM させていただいた資料を公開いたします。 エラー処理を書いてはいけない USTREAMのビデオ タイトルは釣り気味ですが、内容はいたって真面目なのでご安心ください。 概要 やってはいけないシリーズ、の第三弾としての試みです。 リソース管理をしてはいけない ロック処理を書いてはいけない エラー処理を書いてはいけない ← New! タイトルに反して(あるいはタイトル通りに)、正しく長時間動作するプログラムを書くには きちんとエラー処理を行う必要がありますが、 それを何とか抽象化しようという(Haskell界隈での)試みについてのご紹介でございます。 あまり他の人がこういうことを言っているのを聞いたことが無いので、 自分の日々考えていることを世に問うた形になっております。 実際のところ、社内ではC++がメインに使われておりますので、 こういう手法が用いられている

    エラー処理を書いてはいけない - Preferred Networks Research & Development
  • Big Sky :: C++でcoutやcerrの挙動を変える。

    先日twitterで「C++でデバッグする時、よくやるよね」って言ったら結構知らない人がいたのでここでも紹介してみる。 既存のコードでcout/cerrを使ったデバッグ文がわんさかあって、これログファイルとして出力したいな...って場合ありますよね。 そんな場合 #include <iostream> #include <fstream> using namespace std; int main() { // こんなの ofstream ofs("debug.log"); cout.rdbuf(ofs.rdbuf()); // いれとく cout << "debug string" << endl; } こうしておくと、その後のcoutへの出力が全てdebug.logというファイルへ出力される。 なおrdbufを元に戻すには #include <iostream> #include <f

    Big Sky :: C++でcoutやcerrの挙動を変える。
    DOSEI
    DOSEI 2011/04/04
  • 本の虫: 邪悪なC形式のキャストにしかできないこと

    注意:邪悪で汚らわしいC形式のキャストは、いやしくもC++プログラマたる者は、使うべからず C++では、玉虫色のC形式のキャストの機能を、三つに分割した。static_cast、reinterpret_cast、const_castである。しかし、この三種のキャストでは、C形式のキャストを完全に代替できないという声をよく聞く。曰く、「どうしても書けないキャストがある」と。 それはよく聞く話だが、では実際にどのようなキャストなのかということは、誰も審らかにしない。誰も知らないキャストであれば、特に使えなくても問題ないはずだ。ただし、「C形式のキャストならばできるキャストが、新しいキャストを組み合わせてもできない。どんなキャストかは知らないが、とにかくできないと聞いている。故に新しいキャストはクソだ」などという論調で、C++の改良されたキャストを使わぬC畑の外道がしゃしゃり出てくるのも困る。そ

    DOSEI
    DOSEI 2010/10/23
  • deleted定義

    Twitter / digitalghostの妹: int f(int); int f(double) ... おお! void f( int ) {} void f( double ) = delete ; int main() { f(0) ; // OK f(1.0) ;// error } これはすごい。いままでまったく気がつかなかった。よく見たら、deleteは、Deleted definitionsという名前であった。Explicitly-defaulted functionsとは、名前からして明確に異なるのである。素晴らしいことに、deleted定義を指定できる関数に、制限はない。つまり、メンバー関数である必要すらない。 なぜ、いままでメンバー関数にしか使えないという思い込みをしていたのだろう。これは素晴らしい。 ちなみに、こういうこともできる。 void f( int )

    DOSEI
    DOSEI 2010/04/27
  • ログ出力

    最近になって std::clog の存在を知った.「バッファ付き標準エラー出力」だそうな.ってことは std::cout と std::cerr と合わせて 3 つの出力先を使い分けられるじゃん.よぅし. ということで,こんな使い方を提案. 目的 コマンドライン引数 -v (verbose の意) が指定された時のみ,ログファイル (verbose.log など) に処理過程のログを出力する.ログとエラーメッセージは別物として扱いたい.こうしたいのは俺だけかねぇ…. 実装例 main() 内部での記述を想定し,必要となる部分だけ書いた. std::string logfile = "/dev/null"; // UNIX 環境の場合 //std::string logfile = "nul"; // Windows 環境の場合 std::ofstream ofsLog; while ((o

    ログ出力
    DOSEI
    DOSEI 2010/01/18
    clog と cerr を活用する
  • __func__ in C++ - 興味ないね

    関数名を得るマクロ __func__ は C99 でスタンダードになったようだが, C++ ではスタンダードなんだろうか ? http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1642.html この記事ではまだのようだが, これ以降の展開が分からない. gcc では C++ でも __func__ が使えるし, なにより, __PRETTY_FUNCTION__ というのも使える. http://gcc.gnu.org/onlinedocs/gcc/Function-Names.html __PRETTY_FUNCTION__ はクラス名とシグナチャまでつけてくれるからこれがベストだけど, gcc 独自だよね. open-std.org の記事の通り, C++ はデバッグ環境の整備が欠けていますね.

    __func__ in C++ - 興味ないね
    DOSEI
    DOSEI 2010/01/12
    標準化されていない
  • Makefile でのヘッダファイルの依存関係を自動的に解決する - ritcheyの日記

    Makefile でヘッダファイルの依存関係を書くのは結構面倒である。以前は X に付属の makedepend コマンドを使って行うのが普通だったが、便利な方法がないか調べてみた。 GNU make のマニュアルに、まさに依存関係を自動生成する方法そのものがかかれていた。 4.14 Generating Prerequisites Automatically に詳しい説明がある。make の info の日語訳が GNU make 日語訳(Coop編) - ルールの記述 があるが、ここにかかれている Makefile のルールそのままでは動作しなかった。英語の原文の方のルールにしないと動作しない。単に引用符の対応関係がとれていないだけ。 以下のようにすればよい。Makefile 全体を乗せておく。 生成された *.d を include する。ただし、一番最初は *.d は存在しない

    Makefile でのヘッダファイルの依存関係を自動的に解決する - ritcheyの日記
  • イテレータのループを書くときのスタイル - 総合的な学習のお時間

    しょうもないちゃあしょうもない話なんですけど、C++でイテレータのループを書くときに、ループの初期化と終了条件を書く行が長くなりがちなので、改行のスタイルをどうするかよく悩みます。 ※ループの中でvectorに変化ない場合、終了条件を毎回end()を呼び出して検査するのは無駄な関数呼び出しになってしまう可能性があるので、変数に入れています。→C++ Coding Standards 9項「時期尚早に最不適化してしまわない」 改行しない for(std::vector<MyClass*>::iterator itr = m_elements.begin(), end = m_elements.end(); itr != end; ++itr){ // ループの中身 } 行が長くなって読みづらい 1つの行に1つのstatement for(std::vector<MyClass*>::iter

    イテレータのループを書くときのスタイル - 総合的な学習のお時間
  • C++ の型変換 - IT戦記

    http://www.kuzbass.ru:8086/docs/isocpp/special.html#class.conv クラスの型変換はコンストラクタと型変換関数を使って定義できる。これらの型変換は、ユーザー定義型変換と呼ばれ、暗黙的型変換、変数初期化子、明示的型変換に使われる。 ユーザー定義型変換は、型変換の定義が曖昧じゃないときにだけ適用される。型変換は、アクセス制御規則(private, public, protected)に従う。アクセス制御規則は、曖昧さの解決のあと適用される。 もっとも使われるユーザー定義型変換は、単一値への暗黙的型変換だ。 class X { // ... public: operator int(); }; class Y { // ... public: operator X(); }; Y a; int b = a; // NG: X().oper

    C++ の型変換 - IT戦記
  • 13.2 ストリームオブジェクトのコピーと割り当て

    13.2 ストリームオブジェクトのコピーと割り当て ストリームオブジェクトを、単純にコピーしたり割り当てることはできません。これを実際の例で検討します。プログラムの呼び出しで、ファイル名が指定されている場合はファイルに、ファイル名が指定されていない場合は標準出力ストリーム cout に、プログラムはデータを書き込みます。プログラムでは 1 つの出力ストリームに書き込むことができます。このストリームはファイルストリームの場合と、標準出力ストリームの場合があります。一般には、出力ファイルストリームオブジェクトを宣言し、それを cout に割り当てるか、直接的に cout を使用します。ただし、次の方法は不可能です。 int main(int argc, char argv[]) { ofstream fil; if (argc > 1) { fil.open(argv[1]); cout =

    DOSEI
    DOSEI 2009/04/03
    fstream か cout を選択する方法(下の方)
  • Eigen

    Get it The latest stable release is Eigen 3.4.0. Get it here: tar.bz2, tar.gz, zip. Changelog. The latest 3.3 release is Eigen 3.3.9. Get it here: tar.bz2, tar.gz, zip. Changelog. The latest 3.2 release is Eigen 3.2.10. Get it here: tar.bz2, tar.gz, zip. Changelog. The unstable source code from the master is there: tar.bz2, tar.gz, zip. To check out the Eigen repository using Git, do: git clone ht

  • 2004-05-06

    語でのExpression Template(式テンプレート,以下ETと略)の説明で分かりやすいものがなさそうなので思い切って自分が書いてみることにします.もし,まずい説明があれば容赦ないツッコミをお願いいたします. 今日は取り合えず,ETが必要とされる状況の一つとして,数値計算を取り上げてETが必要とされる状況を明らかにしたいと思います. ETはもともと,線形代数ライブラリの構築において発案されたものであり,今回の私の例もこの例を取り上げます. まず,Vectorクラスの構築を考えてみます.Vectorといってもstd::vectorのような可変長配列ではなくて線形代数で言うところのVectorなので注意してください.さしあたって以下のような和とスカラー倍の機能を提供した実装が考えられます. #include class Vector{ size_t const n; double

    2004-05-06
    DOSEI
    DOSEI 2008/10/05
    Expression Template
  • 三項演算子の正しい書き方

    C・C++JavaPerl などのプログラミング言語では、条件演算子として三項演算子?:が用意されている。条件演算子の書き方として、以下のような説明がされることが多い。 condition ? true-expression : false-expression この説明は、以下のプログラムと同じ程度、間違っている。 #include <stdio.h> main( ){printf ("hel" "lo, world\n" );} 条件演算子は、正しくは以下のように書く。 condition ? true-expression : false-expression 使い方の例を示す。 compare = obj1 == null ? obj2 == null ? 0 : -1 : obj2 == null ? 1 : obj1.toString().compareTo(obj2.to

    DOSEI
    DOSEI 2007/07/29
    これで const 変数の初期化が長くなるのを見やすくできる
  • 二流プログラマの三流な日常: using namespace stdをmainの外に書くな

    C++のプロフェッショナルならば、一番外でusing namespaceをすることが、名前空間の汚染にしかならないということは分かっているはずです。 ここはC++言語らしく、使うものは宣言してしまったらどうでしょう? そこで、using宣言子の出番になります。私が思うに、using namespaceを使うのは手を抜くときだけで十分です。

  • Boost --- DTSpecials

    DT Specials -> Boost ここは何? 超強力な C++ ライブラリ群 Boost C++ Library の説明書き置き場です.私個人が必要で調べた内容のうち,Let's Boost で詳しく触れられていないものを補完しようというスタンスです. お品書き boost::numeric::ublas 線形代数関係(行列.ベクトル)のライブラリです.連立方程式を解くことと逆行列を求めることを主眼にサンプルコード付きで説明しています. boost::spirit エラーとその対処方法 構文解析ライブラリ boost::spirit の実装には変態的テクニックがふんだんに使われています.そのため,コンパイルエラーに対してどう対処してよいかさっぱり分からないこともままあります.このページは,私が boost::spirit を使用中に遭遇したエラーとその対処方法をまとめたものです.

  • [オープンソース] Makefileを公開しよう - higepon blog

    最近 id:yaneuraoさんが PSPであそぼう エントリを精力的に書かれていて非常に面白い。 PSPでC++プログラミングするための環境を整えたりしているのだが、こんなマニアックでディープな技術blogで読めるというのはかなりすごいことだと思います。 さてその中で id:yaneurao:20050630のエントリーがちょっと気になりました。 いわゆる make についての説明と、やねうらおさんの独自 Makefileが公開されているという内容でした。 makeは、大規模なソースツリーを、ビルドするときに使うと便利なツールで、Unix系でアプリケーションをコンパイルしたことがある人ならご存知だと思う。 いわゆる make make install というお約束のアレである。 また Javaに詳しい方なら Ant のご先祖様というと分かりやすいかもしれない。 やねうらおさんは 最近の

    [オープンソース] Makefileを公開しよう - higepon blog