3

だから私がやりたいことは、私のプログラムの既存のベクトルクラスを拡張して、これを言うことができるようにすることです.

vector<string>* vec = new vector<string>(){"Value1","Value2"};

また

vector<string>* vec = new vector<string>({"Value1","Value2"});

また

vector<string> vec = {"Value1","Value2"};

私はこのようなことを達成できることを知っていますが、これを行うと、

string temp[] = {"Value1","Value2"};
vector<string> vec(temp, temp+ sizeof(temp) /  sizeof( temp[0] ) ); 

これはベクトル反復子コンストラクターを使用しますが、余分な行を削除できませんか?

partialC# では、次のようなキーワードを使用して、既存のものに何でも追加できることを知っています。

public partial class ClassName
{
   ClassName(Stuff stuff)
   {

   }
   void AmazingNewMethod()
   {

   }    
}

C++ には、このような気の利いたトリックがどこかにありますか?

ベクトルを継承customVectorし、舞台裏でイテレータ コンストラクタを実行するコンストラクタを持つ a を構築する必要がありますか?

これらの行を参照によって設定する静的なヘルパー関数呼び出しでラップし、どこかのツールボックス クラスに追加しますか?

多くのプログラマーがこの問題にぶつかったように感じます。そこにエレガントなソリューションはありますか?

ありがとう。

編集:これが Initializer List コンストラクターであることを示すようにタイトルを修正しました。

4

2 に答える 2

7

C++11 ではinitializer lists、このアプローチに適しています。.NET について言及しているように、MS Visual Studio を使用していると仮定します。Microsoft はイニシャライザ リストを実装していないため、そのようなことを実現する最も簡単な方法は、すべての要素が追加されたベクトルを返す関数です。

事について: C++ は、partial.NET の部分クラスと同じような機能を提供していません。

于 2012-09-05T22:10:27.667 に答える