0

これがC++で可能かどうか疑問に思っています。

PHP(フレームワーク)では、クラス(オブジェクト)とクラス内のメソッドが次のユーザーによってアクセスされているのを目にすることがあります。

$this->encrypt->decode($msg, $key);

私のプログラムの1つには、次のものがあります。

Directory *d = new Directory("dir");
d->open();

代わりに持つことは可能ですか?

Directory *d = new Directory("dir")->open();

では、2つのメソッドを同じ行で実行できますか?

4

2 に答える 2

1

いいえ、Directory クラスがこれを明示的にサポートするように設定されていない限り、これは不可能です。これには通常、クラス内のほとんどのメソッドがそれ自体への参照を返すようにして、メソッド呼び出しを連鎖できるようにする必要があります。

ただし、phpの例はまったく異なります。投稿した例の C++ バージョンは次のようになります。

Directory("dir").open();

で返される Directory インスタンスのキャプチャなしDirectory("dir")

于 2013-01-19T23:09:24.313 に答える
1

PHP コードは、現在のクラス内でメソッドを$this->encrypt->decode($msg, $key);呼び出しています。decode()encrypt

あなたが持っているコードは、クラスを初期化してから呼び出すという別のタスクを実行しています。

PHP でこれを行うことができなかったのと同じように:

$test = new Test()->method();

.. C++ でもできません。Testこの場合、 inのインスタンスは期待できません$test。代わりにmethod()、新しくインスタンス化されたテスト オブジェクトの戻り値になります。

open()そうは言っても、のインスタンスではなく、の戻り値のみが必要な場合(またはまったく必要ない場合)、実際に言うようにインライン化できますDirectory

Directory("dir").open();
于 2013-01-19T23:09:26.453 に答える