タグ

c++に関するBoBppのブックマーク (18)

  • C++プログラマ キャスブログ

    C++11から右辺値参照とムーブセマンティクス呼ばれる機能が追加されました。 それについては別の回でご紹介したいと思います。 今回はコンテナに追加するメソッドを置き換えるだけで効率的になる手段をお伝えします。 結論から言えば下記のメソッドを置き換えましょう! push_back → emplace_back push_front → emplace_front こちらが参考コードです。 #include <vector> //std::vectorを使うためのヘッダー #include <cstdio> //printfを使うためのヘッダー class Test { public: Test(int i) { printf( "コンストラクタ\n"); } Test(const Test&) { printf( "コピーコンストラクタ\n"); } }; int main() { std:

  • Boostライブラリのビルド方法 - boostjp

    ここではBoostライブラリのビルド方法について説明します。 Windowsとそれ以外に分けて説明します。また、LinuxではBoostライブラリがディストリビューションによって提供されていることがありますが、ここではビルド方法のみを扱います。 1.47.0からbjamだけではなく、b2も生成されるようになりました。また、公式がbjamからb2での説明に切り替わっています。なので、こちらもそれに合わせることにします。 ダウンロード 現在の最新バージョンは、以下からダウンロードできます: http://www.boost.org/users/download/#live 開発バージョンは、Githubから取得できます: https://github.com/boostorg Github から clone する場合、具体的には boostorg/boost を clone し、実際の Boo

  • nmコマンドでC/C++のシンボルテーブルを見る、C++の名前マングリング、"C"リンケージ、あるいはリンカに関するメモ - 百日半狂乱

    前回(g++)と前々回(gcc)のサンプルコードを使ったC++のマングリングや"C"リンケージに関するメモ. nmコマンドでサンプルコードのシンボルテーブルを覗いた後に、C++からCの関数を呼び出す場合のサンプルコードを示す. 特にリンケージ周りの説明は正確性を欠いているやもしれませんのでご容赦下さい.より詳細な説明は参考リンク等を参照して頂ければと思います. nmコマンド nm は、UNIXや類似のオペレーティングシステムに存在するコマンドであり、バイナリファイル(ライブラリ、実行ファイル、オブジェクトファイル)の中身を調べ、そこに格納されているシンボルテーブルなどの情報を表示する。デバッグに使われることが多く、識別子の名前の衝突問題やC++の名前修飾の問題を解決する際に補助として用いられる。 GNUプロジェクトでは、高機能の nm プログラムを GNU Binutils パッケージの一

    nmコマンドでC/C++のシンボルテーブルを見る、C++の名前マングリング、"C"リンケージ、あるいはリンカに関するメモ - 百日半狂乱
    BoBpp
    BoBpp 2015/06/01
  • Loading...

  • C++では基底クラスにvirtualデストラクタを書こう - *「ふっかつのじゅもんがちがいます。」withぬこ

    (追記あり/再追記あり) ブクマ経由で、C++で演算子オーバーロードしたときの演算子決定基準について調べたというのを見たのだけど、書いてあるサンプルコードが演算子オーバーロード以前にちょっとダメだった。 昔書いたテストコードと書いてあるので、今は分かってるのかもしれないけど、ある程度経験を積んだC++プログラマは絶対に(というのは言いすぎでした)virtualデストラクタのないクラスを継承しない(追記やTBやブコメの議論を参照のこと)ので、このサンプルコードを載せて違和感を感じない時点で、演算子オーバーロードをいじるよりもまずはEffective C++を読んだ方がよい。 何がダメか。以下のように、virtualデストラクタがないクラスを継承している。これはダメだ。例え基底クラスのデストラクタですべきことがないのだとしても、継承するつもりのあるクラスにはvirtualデストラクタを作らない

    C++では基底クラスにvirtualデストラクタを書こう - *「ふっかつのじゅもんがちがいます。」withぬこ
    BoBpp
    BoBpp 2014/06/27
  • iOSとandroidで処理を分ける方法 - プログラマーのアプリ開発日誌

    マクロによる方法 #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) log("os = %s","ios"); #elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) log("os = %s","android"); #endif 関数による方法 Application::Platform platform = Application::getInstance()->getTargetPlatform(); if (platform == Application::Platform::OS_IPHONE || platform == Application::Platform::OS_IPAD) { log("os = %s","ios"); } else if (platform == Applicati

  • Doxygen 向け C/C++ ファイルのコメントテンプレート - l1o0の日記

    Doxygen 高機能なんだけど、高機能すぎてどうやって Doxygen 用のコメントを書けばいいのかよくわからん。コメントとルール作りも兼ねてテンプレートを作っておこう。 Doxygen のいいところはソースコードが可視化されることもあるけど、コメントを付けてないとソースコード解析時に「コメントが付いとらん」と警告してくれるところ。さぼってコメントを付けないのを防いでくれる。 Doxygen C/C++ テンプレート comment.c /**********************/ /* ファイルヘッダの例 */ /**********************/ /******************************************************************************/ /*! @addtogroup モジュール名_サブモジュール名

    Doxygen 向け C/C++ ファイルのコメントテンプレート - l1o0の日記
  • C++高速化

    はじめに 速いプログラムで得られるメリットを超えるようなコストを払わないように。 まずは動くプログラムを書いて目的を達成することが大事。 自分律速じゃなくてプログラム律速だなと感じた段階でリファクタリングを考える。 プログラム来の意図が読み取れなくなりそうなマニアックな高速化は避ける。 清く正しくメンテナンスしやすいプログラムを書くほうが結局は生産的。 学習目的でない限り、車輪の再発明を避ける。 やろうとしていることはきっと既に誰かが実現し、 再利用可能な形で公開してくれているはず。 まずは標準ライブラリとかBoostを探してみる。 あとGitHubでスターが多いやつとか。 頑張れコンパイラ Intelの icc でビルドされたプログラムは速いらしい。 gcc や clang の最適化技術も着々と進歩しており、 新しいコンパイラを使うほうがその恩恵を受けられる。 最適化オプション htt

    C++高速化
    BoBpp
    BoBpp 2014/06/18
  • constメンバ関数は重要 - Faith and Brave - C++で遊ぼう

    私は基的に、C++でソース書くときはやたらめったらconst付けます。 なぜならHaskellが好きだからです(ぇ じゃなくて、状態の変更によるバグを減らすためです。 しかし、他人が書いたソースを見てると、オブジェクトのconst操作を考えて設計されてないことが けっこうあり、Is〜とかGet〜といった名前の関数の中でメンバの状態を変更してたりします。 これはとくに、JavaやC#のようなconstメンバ関数がない言語からC++に移植するようなときに 起こりやすいのですが、C++でもconstメンバ関数の存在を知ってか知らずかconstが付いてないことが多々あります。 書籍でいうと、『Game Programming Gems』では明らかにconst操作なメンバ関数にconst付いてないですね。 C++で大きなプログラムを組む際は、元となるコード(移植元やライブラリ)がオブジェクトのco

    constメンバ関数は重要 - Faith and Brave - C++で遊ぼう
    BoBpp
    BoBpp 2014/06/18
  • 本の虫: 邪悪なC形式のキャストにしかできないこと

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

    BoBpp
    BoBpp 2014/06/18
  • C++ でのビルド時間を短縮するいくつかの方法 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ

    ある程度大きな C++ のコードを書いたことがある人なら大抵はこの問題について考えますよね。まして Boost なんて使っていた日には「コンパイル時間が Boost される」とか言われる訳です。 コンパイル時間を活用してコーヒー入れたりトイレ行ったりブラウジングしたり Twitter に「リビルドなう」とか Post したりといった素晴らしい方法もありますが、ここではビルド時間を短縮する方法を考えていきます。 事前知識 多分どこでも言われてることだと思いますし、結構適当に書いてるので読み飛ばしてもいいと思います。 コンパイルが遅い原因 C++ のコンパイル時間の多くは、プリプロセッサにあります。プリプロセス時に行われる include やマクロの展開でかなり多くの時間を取っています。 きっと Boost.PP なんて使っていた日には「コンパイル時間が Booooooooooooooooos

    C++ でのビルド時間を短縮するいくつかの方法 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ
    BoBpp
    BoBpp 2014/04/25
  • コンストラクタでは、代入よりも初期化を使おう 12項 - higepon blog

    これよりも Hoge::Hoge(const string& initName) { this->name = initName; }これを使いましょうという話。 Hoge::Hoge(const string& initName) : name(initName) { } 理由は、初期化リストではstringのコピーコンストラクタのみが実行されるのに対して、コンストラクタでの代入では、コンストラクタ・代入が行われて効率が良くないから。 またメンバの name がもし仮に const であるならば(これは良くあることだが)、そもそも初期化リストでしか初期化できない。 代入を使うほうが理にかなっているというシチュエーションもあり、(大量組み込み型データメンバーの場合)、その詳細は、Effective C++ 【改訂第2版】 アスキーアジソンウェスレイシリーズ―Ascii Addison We

    コンストラクタでは、代入よりも初期化を使おう 12項 - higepon blog
    BoBpp
    BoBpp 2014/04/09
    こういう記法があるのか。。。
  • 関数コールバックなんて無くなればいいのに

    関数コールバックは,それしか方法が無かった時代の遺物である.近代のプログラマは関数コールバックを断固拒否すべきである.来,コールバックすべきなのはクロージャである. 関数コールバックは,あらかじめ関数ポインタ(C言語で言えば)をランタイムライブラリに渡しておき,「何かあったら」その関数ポインタをたぐり寄せて関数をコール(バック)してもらうメカニズムである.例えば標準C言語ライブラリのsignalメカニズムがそれに相当する.動的な関数のバインディングを許さないC言語では,これが実行時多様性を確保する(多少なりとエレガントな)唯一の方法である. 単純な関数コールバックは標準C++言語では扱いづらいものである.もしランタイムが関数ポインタを要求するならば,プログラマは関数ポインタを渡さなければならない.ところが,C++言語ではメンバ関数ポインタは関数ポインタではないから,メンバ関数をコールバッ

    BoBpp
    BoBpp 2014/04/09
  • 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のメモ置き場
    BoBpp
    BoBpp 2014/04/07
  • Travis CIでrubyのC拡張が入ったgemのテストをする方法 - masarakki's blog

    No Such File C拡張が含まれたgemをそのままTravisに流してみると、 $ bundle exec rake 56/home/vagrant/.rvm/rubies/ruby-1.8.7-p358/bin/ruby -S rspec spec/jpeg_spec.rb 57/home/vagrant/builds/masarakki/jpeg/spec/../lib/jpeg.rb:2: in `require': no such file to load -- jpeg.so (LoadError) 自分でコンパイルしないといけないみたいですね。 とりあえずやってみた 試しに.travis.ymlでコンパイルの命令を追加してみました。 やった! Travisがテスト全部通したよ!!! Travisの実行ログを見てみると、 55$ cd ext ; ruby extconf

  • ​【Poppin Games寄稿(1)】リリース目前!cocos2d-x バージョン3.0でゲーム開発は新時代へ | gamebiz

    iOSとアンドロイド、2大プラットホーム対応のゲーム開発が可能な『cocos2d-x』。国内外を問わず採用事例も多い人気フレームワークだが、その次期メジャーバージョンアップである3.0のリリースが近づいている。稿ではcocos2d-x自体の紹介と共に、バージョン3.0の注目機能を取り上げてみたいと思う。要チェックだ! ◆cocos2d-xとは? cocos2d-xはMITライセンス下で配布されているゲーム開発用フレームワークであり、github上で誰でも参加できるオープンなスタイルで開発が進められている。すでにご存知の方も多いと思われるが、改めて紹介しておこう。 cocos2d-x最大の特徴はiOS、AndroidをはじめMacWindows向けのゲームも開発できるマルチプラットホーム対応だ。開発言語には、C++をはじめLua、JavaScriptなどが使用できる。 エイリムの『ブレイ

    ​【Poppin Games寄稿(1)】リリース目前!cocos2d-x バージョン3.0でゲーム開発は新時代へ | gamebiz
  • モダンなプログラミング言語の開発環境の構築方法まとめ - ネットサービス研究室

    随時更新していきます。 モダンなPerlの開発環境の構築方法 モダンなPHPの開発環境の構築方法 モダンなPythonの開発環境の構築方法 モダンなJavaの開発環境の構築方法 モダン(かもしれない)なEclipse環境(Java)の構築方法 モダンなC, C++の開発環境の構築方法 モダンなMySQLの開発環境の構築方法

    モダンなプログラミング言語の開発環境の構築方法まとめ - ネットサービス研究室
  • google-gflags - Commandline flags module for C - Google Code

    Code Archive Skip to content Google About Google Privacy Terms

  • 1
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy