2012-04-01 15 views
1

メンバ関数の定数バージョンを強制的に呼び出す方法が必要です。私はできるだけ効率的にしようとしています。良い解決策はありますか?定数バージョンメンバ関数への呼び出しを強制する

EDIT:一般的な機能を探して

+0

const型への参照、またはconst型への参照を作成します。 – Corbin

+0

一般的な関数を作成する場合は、キャスティングを避けることはできますか? – dchhetri

+0

なぜあなたはconstバージョンをとにかく呼んでいますか?私はconstメソッドの非constバージョンが基本的に同じであると期待しているので、これがどれだけパフォーマンスを向上させるかは本当にわかりません。 – Corbin

答えて

1

const型、またはconst型への参照を参照します。

あなたは気の利いた方法でそれをすることができますが、その日の終わりには、それが唯一の方法です。

実際に私はこれの目的が何であるかわかりませんが、努力する価値がないようです。

また、私はジェネリック関数の意味を理解していません。それはいくつかの明確化が必要ですが、私が正しく理解している場合は、ポインタ/値/参照をとり、それを関数に渡して、魔法のようにconstメソッドを呼びたいのですか?これは、多型または少なくとも同じ名前のメソッド(テンプレート)を使用できる場合にのみ機能します。

0

それは自動的にパラメータが渡されによってその上のconstまたは非constバージョンを呼び出します。あなたはconstから非constへのキャストしかできません。それはばかげているかもしれませんが、それは世界の道です。

たとえば、あなたは通常、この操作を行うことができます:

void function(char foo); 
void function(int foo); 

function(4); 
コンパイラが呼び出しするかを「あなたのための決定」になる

は、あなたがそれを明示的に行うことができますがあり

int x; 
function((int)x); 
function((char)x); 

を行うことによって、オーバーロードされたconstバージョンを明示的に渡すための同等物はありません。

もちろん、はconstバージョンとしてを定義するだけで、パラメータは単にconstとして渡されます。

+0

申し訳ありませんが、通信がスタンドアロンではないメンバー関数のためのconstバージョンを意味します – dchhetri

+0

@ user814628特定の型を強制的に使用する方法を説明していましたが、キャストTO型を使用できません。 constバージョンのみを提供する点を除いて。メンバ関数かどうかは関係ありません。私が不明な場合は申し訳ありません? –

+0

主な違いは、関数プロトタイプの末尾に "const"を追加して区別できることです。 Ex、void foo(int)const vs void foo(int) – dchhetri

関連する問題