簡體   English   中英

std :: vector的C ++初始化列表 <obj*> 作為構造函數參數

[英]C++ initializer list for std::vector<obj*> as constructor parameter

我遇到一種情況,需要創建帶有許多對象指針參數的類的實例。 但是,我正在尋找一種更簡單的方法。 在此代碼示例中,我非常籠統地演示了我要執行的操作。

#include <vector>
#include <string>
class A
{
  public:
    A(std::string param);
};
class B
{
  public:
    B(std::vector<A*> params);
};
int main(int argc, char* argv[])
{
  std::vector<A*> my_arguments;
  my_arguments.push_back(new A("A1"));
  my_arguments.push_back(new A("A2"));
  my_arguments.push_back(new A("A3"));
  my_arguments.push_back(new A("A4"));

  B my_b = new B(my_arguments);
}

我不想使用額外的5行來創建此調用的參數。 是否有另一種方法來執行此操作,所需的代碼更少。 我嘗試使用像這樣的數組,但是它似乎不起作用:

  B my_b = new B([new A("A1"), new A("A2"), new A("A3"), new A("A4")]);

我如何獲得類似的結果? 我考慮過使用va_list ,但是那將需要另一個標記結束的參數或對變量數量的計數。 這可能是我最終要做的,但是,還有其他策略嗎?

你快到了...

B my_b{{new A("A1"), new A("A2"), new A("A3"), new A("A4")}};

注意:您的代碼正在嘗試創建不是指針的B my_b ,因此您無需使用new 外部{ }對圍繞構造函數的參數,內部{ }對為std::vector構造函數創建一個std::initializer_list ,因此其中的值用於構造std::vector參數。

請注意,自C ++ 11開始就支持此語法-一些編譯器需要命令行參數來啟用對C ++ 11標准的支持,例如gcc -std=c++11 ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM