minahitoの鯉日記スマートフォン用の表示で見るminahitoの鯉日記この広告は、90日以上更新していないブログに表示しています。C++仮想関数(抽象化)は、異なる2つの環境に、ひとつのソースコードで対応するための数ある対応策のひとつとしてしばしば利用されます。持っているなけなしの分岐予測もほぼ効果を発揮せず、確実にパイプラインストールを発生させてしまう点にあります。よるランタイム最適化が実現されるまで待たなければいけないでしょう。仮想関数は非常にうまい方法ですが、少なくとも起動前に確定していることは畳み込みたいところです。PS3とXbox360の機種の差を埋めるマルチプラットフォーム対応ミドルウェアがあったとします。両機種の差異を仮想関数で抽象化して埋める方法がまず考えられますが、実際に完成したソフトの使われ方を考えますと、同じプログラムがPS3とXbox360を切り替えることはありえません(物理的に無理)。アプリがビルドされる時点で、どちらのコードを使うかが確定されています。いうことになりますので、抽象化ではなく、リンクするライブラリやインクルードするファイルをスイッチする方法でも対応することができます。この方法は環境の差異のために仮想関数を使いませんので、オーバーライドを許さない関数のすべてのアドレスをリンク時に確定することができます。インライン展開も非常に効率的に行われるでしょう。いったやり方は、マルチプラットフォーム対応では典型的な対策のひとつで、少し前のPCゲームでは、各CPUへのインラインアセンブリコードやスクリプトのJITを切り替えるビルドなどで使われていました。コンパイラのバージョンの差異をつぶしたり、デバッグバージョンのライブラリをリンクする[y/n]などでもお馴染の方法です。スクリプトプログラミングでも有効です。いう要素も持っています。環境の差異を取り除いてくれる関数やマクロを作ることを考えてみます。このプラットフォーム条件は、プログラムの稼動中に切り替わるものではありません。したがって同一関数名が定義されているファイルを読み込む際に、環境の条件にあわせてロードするファイルを切り替えることでも対応ができます。用いているインクルードやリンクのスイッチとほぼ同じ意味を持ち、各関数内でそれぞれ環境を判断してスイッチするよりパフォーマンス的にうまく働きます。この方法はスタンダードのひとつと言えますが、スクリプトプログラミングの世界にはまた別のレギュレーションがありますので、そこが議論を呼んでしまうかもしれません。»プロフィールid:minahito_carp今年こそ広島が優勝したブログ。(1)はてなブログをはじめよう!minahito_carpさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。