メンバーの配列を使用したイニシャライザーリスト時間メンバーコンテナーの初期化

オプセナス

メンバー変数の配列のサンプルコードを使用して、クラスメンバーコンテナの初期化を実装しようとしています。

//Pseudo container declaration
class CContainer
{
    template<size_t nSize>
    CContainer(CMember* acArray[nSize]);
};
//class whos members i wanna pass as array to container initialization
class CProblematic
{
    CMember m_1;
    CMember m_2;
    ...
    CMember m_n;
    CContainer m_cContainer;

    //constructor with container initialization
    CProblematic(int parameter)
    : m_1(parameter)
    , m_2(parameter)
    ...
    , m_n(parameter)
    , m_cContainer({&m_1, &m_2, ... , &m_n})
    {}
};

複数のコンテナーコンストラクター構文を試しましたが、役に立たないようです。たとえば、構築CContainer(CMember** apcArray, size_t nSize中にそれを使用して渡そうとしましたがスタイル配列の作成CProblematicを使用するときに役に立たないようです。{...}誰かが私の間違いを指摘したり、解決策を指摘したりする可能性があります。 ?

これを解決する最も簡単な方法はm_cContainer.Add(&m_1)、各メンバーのコンストラクター本体追加することですが、もっと興味があるのは、この方法で初期化するソリューションがあることです...

TC

CWG 1591の解像度を実装するコンパイラでは、次のことができます。

template<size_t nSize>
CContainer(CMember* const (&acArray)[nSize]); // or CMember* (&&acArray)[nSize]

そしてnSize、braced-init-listから推測しましょう{&m_1, &m_2, ... , &m_n}

それ以外の場合は、境界を推測するためstd::arrayに、ヘルパー関数テンプレートで使用できます以下は、の簡略版ですstd::experimental::make_array

template <class... Ts>
auto make_array(Ts&&... t) -> std::array<std::common_type_t<Ts...>, sizeof...(Ts)>{
    return { std::forward<Ts>(t)... };
}

次に、あなたの答えに似m_cContainer(make_array(&m_1, &m_2, ... , &m_n))ているコンストラクターを使ってstd::arrayください:

template<size_t nSize>
CContainer(std::array<CMember*, nSize>&& aArray) 

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

同時にイニシャライザリストを使用したC ++ 11のデフォルトのクラスメンバーの初期化

分類Dev

イニシャライザリストのconst参照メンバーの初期化

分類Dev

イニシャライザリストを直接使用して、1つの配列のみをメンバーとして構造体を初期化することは合法ですか?

分類Dev

イニシャライザリストで多くのオブジェクトメンバー変数を初期化しています

分類Dev

静的メンバー関数を使用してイニシャライザーリストの定数メンバー変数を初期化することに問題はありますか?

分類Dev

シーケンスを使用した静的(メンバー)配列のエレガントな初期化

分類Dev

クラスメンバー関数のスレッド化。イニシャライザリストによるスレッドの初期化

分類Dev

イニシャライザリストで例外をスローしたメンバーを見つける

分類Dev

スーパーバイザーを介したDockerコンテナーのシャットダウン

分類Dev

カスタムカメラビューからのインテントを介したZXingバーコードスキャナーの使用エラー

分類Dev

caseステートメントを使用したバイナリエンコードされたステータス文字列のデコード

分類Dev

ゼロ-初期化リストの配列メンバーを初期化します

分類Dev

イニシャライザを使用したC ++の新しいifステートメント

分類Dev

テンプレートの非静的データメンバーイニシャライザーはいつインスタンス化されますか?

分類Dev

イニシャライザリストの時点でパラメータが利用できない場合、メンバーオブジェクトを初期化するにはどうすればよいですか?

分類Dev

クラス内の別のメンバーでメンバー配列のサイズを初期化する

分類Dev

C ++は、ヘッダーで初期化された静的constメンバーが、コンパイルユニットとライブラリ間で単一のインスタンスを共有することを保証しますか?

分類Dev

配列リストの特定のクラスメンバーを初期化する

分類Dev

>>演算子のオーバーロードとカスタムタイプのイニシャライザリストを使用した初期化

分類Dev

イニシャライザリストの以前のメンバーを参照できますか?

分類Dev

イニシャライザリストを使用してテンプレート変数を初期化する

分類Dev

constexprを使用して、コンパイル時にメンバー関数へのポインターの配列を初期化します。

分類Dev

クラスコンストラクターで初期化されたタイプのストリームのメンバー変数を使用できますか?

分類Dev

文字列リテラルを使用してコンストラクターでstd :: array <char、x>メンバーを初期化しています。GCCのバグ?

分類Dev

イニシャライザリストで複数の引数を取るメンバー変数

分類Dev

イニシャライザの静的メンバーのみ

分類Dev

ジャンプはswitchステートメントの変数の初期化をバイパスします

分類Dev

フロントカメラを使用したdm77のバーコードスキャナーライブラリ

分類Dev

クラスのコピーコンストラクタが削除されたときに、クラスの配列メンバーを初期化します

Related 関連記事

  1. 1

    同時にイニシャライザリストを使用したC ++ 11のデフォルトのクラスメンバーの初期化

  2. 2

    イニシャライザリストのconst参照メンバーの初期化

  3. 3

    イニシャライザリストを直接使用して、1つの配列のみをメンバーとして構造体を初期化することは合法ですか?

  4. 4

    イニシャライザリストで多くのオブジェクトメンバー変数を初期化しています

  5. 5

    静的メンバー関数を使用してイニシャライザーリストの定数メンバー変数を初期化することに問題はありますか?

  6. 6

    シーケンスを使用した静的(メンバー)配列のエレガントな初期化

  7. 7

    クラスメンバー関数のスレッド化。イニシャライザリストによるスレッドの初期化

  8. 8

    イニシャライザリストで例外をスローしたメンバーを見つける

  9. 9

    スーパーバイザーを介したDockerコンテナーのシャットダウン

  10. 10

    カスタムカメラビューからのインテントを介したZXingバーコードスキャナーの使用エラー

  11. 11

    caseステートメントを使用したバイナリエンコードされたステータス文字列のデコード

  12. 12

    ゼロ-初期化リストの配列メンバーを初期化します

  13. 13

    イニシャライザを使用したC ++の新しいifステートメント

  14. 14

    テンプレートの非静的データメンバーイニシャライザーはいつインスタンス化されますか?

  15. 15

    イニシャライザリストの時点でパラメータが利用できない場合、メンバーオブジェクトを初期化するにはどうすればよいですか?

  16. 16

    クラス内の別のメンバーでメンバー配列のサイズを初期化する

  17. 17

    C ++は、ヘッダーで初期化された静的constメンバーが、コンパイルユニットとライブラリ間で単一のインスタンスを共有することを保証しますか?

  18. 18

    配列リストの特定のクラスメンバーを初期化する

  19. 19

    >>演算子のオーバーロードとカスタムタイプのイニシャライザリストを使用した初期化

  20. 20

    イニシャライザリストの以前のメンバーを参照できますか?

  21. 21

    イニシャライザリストを使用してテンプレート変数を初期化する

  22. 22

    constexprを使用して、コンパイル時にメンバー関数へのポインターの配列を初期化します。

  23. 23

    クラスコンストラクターで初期化されたタイプのストリームのメンバー変数を使用できますか?

  24. 24

    文字列リテラルを使用してコンストラクターでstd :: array <char、x>メンバーを初期化しています。GCCのバグ?

  25. 25

    イニシャライザリストで複数の引数を取るメンバー変数

  26. 26

    イニシャライザの静的メンバーのみ

  27. 27

    ジャンプはswitchステートメントの変数の初期化をバイパスします

  28. 28

    フロントカメラを使用したdm77のバーコードスキャナーライブラリ

  29. 29

    クラスのコピーコンストラクタが削除されたときに、クラスの配列メンバーを初期化します

ホットタグ

アーカイブ