2013-04-21 5 views
5

これは表示することができます。このコンパイル例として、確かに可能である:関数/メソッドを参照渡しで渡し、オーバーロードがC++の値渡しに渡すことはできますか? C#ので

static void Teste(int x) { } 
static void Teste(ref int x) { } 
static void Teste() 
{ 
    int i = 0; 
    Teste(i); 
    Teste(ref i); 
} 


をしかし、それはコンストラクタでC++(/ CLI)で行うことができますか?以下の例を参照してください:このクラスは、これらのコンストラクタを使用してコンパイルんが

class Foo 
{ 
    Foo(int bar) 
    { 
     // initializing "Foo" instance... 
    } 
    Foo(int &bar) 
    { 
     // initializing "Foo" instance... 
    } 

    //... 
} 

私は私は1つを適用するときに選択する方法を見ることができないとされている他、つまり、呼び出しがambiguosで、noキーワードの私は存在しないとして、 C#では "ref"としてこの目的のために知っている。私はコンストラクタで名前をクラスと同じにする必要があります(もちろん無用なパラメータを追加することができますが、でない場合はとするかどうかを知りたい)。

ところで、私はグーグルで「refとvalueの違いは何ですか?このようなオーバーロードをカバーするものは何もありません。そして私は回避策として、私はポインタを使用することができると思う、 "アドレスを取る"(&)のおかげで;または上記のように余分な無駄なパラメータを持つことがあります。しかし、私が知りたいのは、これらのような過負荷(ref/value)がありますか?事前に

おかげで、

+0

ポインタを1に渡して値をもう一方に渡して、コンストラクタを初期化してみてください。 – smac89

+0

これは重複しているかもしれませんが、私の防衛では、あまりうまく検索しません。また、他の質問の名前はそれほど魅力的ではありません(ただし、この名前はあまりありません)。また、傍注として、他の人がそれが意味を成すかどうか聞いて、可能かどうか尋ねます。 – JMCF125

答えて

1

あなたは希望の型に明示的なキャストを提供することにより、C++で同様のものを達成することができます。

struct Foo 
{ 
    Foo(int /*bar*/) {} 
    Foo(int &/*bar*/) {} 
}; 


int main() 
{ 
    int value = 5; 
    Foo foo(static_cast<const int&>(value)); 

    return 0; 
} 

constへのキャストは、オーバーロードの解決は、非const参照を取るコンストラクタを無視するようになりますし、値渡しに落ち着くだろう。

+0

なぜ** const ** 'int&'?なぜ 'int 'だけで動作しないのですか? – JMCF125

+1

@ JMCF125非const参照は引き続き値によってコンストラクタに渡すことができます。 –

+0

これは扱いにくいですが、今度はもう一度テストしましたが、そうではありません。今は 'const int&'から 'const int'に変換されているようです... – JMCF125

関連する問題