不明な構造体を(実行時に)テンプレートパラメーターとして渡す

Xマーシャル

実行時に未知の構造をパラメーターとして受け入れる汎用テンプレート関数を作成しようとしています。不明な構造体とは、構造体メンバーの変数名とそれに対応するデータ型および値についての知識がないことを意味します。次に、関数は、すべての構造体メンバーのタイプとそれに対応する値を1つずつ推測する必要があります。構造体メンバー関数で数値を返す(ハードコードされている)ことができるので、構造体メンバーの数は気にしません。私が理解できないのは、実行時に、着信構造体のメンバータイプとそれに対応する値を動的に取得する方法です。これが今までの私のコードです:

struct test1 //Any struct of this type will be passed as a parameter to the template function, with more or less the same data types
{
    int n1;
    double d1;
    std::string s1;
    double d2;
    std::string s2;

    int sCount() { return 5; } //Hardcoded
};

    template <class T>
    std::string structToString(const T& st)     //Pass unknown struct as input
    {
        //I am not able to understand how to get all the structure members, one by one, and their types and values at run time

    }

    int main()
    {
        test1 obj = { 0 };
        obj.n1 = 10;
        obj.d1 = 12.23;
        obj.s1 = "XYZ1";
        obj.d2 = 13.65;
        obj.s2 = "ABC1";

        structToString<test1>(obj);

    return 0;
    }

おそらくtypeid(T).name()、各structメンバーのようなものを使用してタイプを取得できますが、すべての(不明な)メンバーを反復処理し、それらの値を取得する方法もあります。

前もって感謝します...

tdk001

簡単な答え:できません。

長い答え:テンプレート関数の特定の実装のためにできます。

これまでのところ良いスタートですが、もう1つ必要です。structToString()文字列に変換できるようにする特定の構造体の関数を定義する必要があります。そのようです:

template <>
std::string structToString(const test1& st)     //Pass KNOWN struct as input
{
    // Now you have access to struct test1's member data
}

これstructToString()で、test1オブジェクトを使用して呼び出すたびに、この新しいstructToSting()メソッドが呼び出されますがメソッドを定義しない他の構造体は、汎用メソッドを呼び出します。(その後、「[不明]」などを返すことができます)

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

テンプレートクラス/構造体のメンバー関数アドレスを関数パラメーターとして渡す

分類Dev

テンプレート引数として一時構造体を渡す

分類Dev

実行時にオプションの不明なパラメータを渡す

分類Dev

実行時にオプションの不明なパラメータを渡す

分類Dev

テンプレートメソッドc ++で構造体パラメータを渡す

分類Dev

テンプレートパラメータを構造体のようなものに保存する方法は?

分類Dev

構造体をパラメータとして関数に渡す方法

分類Dev

構造体配列をパラメータとして関数に渡す

分類Dev

構造体のインスタンスにメソッドをパラメータとして渡す

分類Dev

構造体を値パラメーターとしてスレッドに渡す

分類Dev

関数テンプレートパラメーターとしてのC ++構造体関数

分類Dev

ネストされた構造体配列をパラメーターとして関数に渡す方法は?

分類Dev

可変個引数テンプレートパラメータで構造体を使用すると、2つのテンプレートが同時にインスタンス化されるのはなぜですか?

分類Dev

定義されたクラスをテンプレートパラメータ内の構造体として宣言します

分類Dev

テンプレートパラメータリストを含むstlコンテナを構造体に渡す

分類Dev

不明なタイプのクラスのテンプレートパラメーターとして関数を渡す

分類Dev

C ++で追加のテンプレートパラメータを使用してテンプレート構造体を拡張する

分類Dev

Golang:構造体を関数のパラメーターとして渡す

分類Dev

構造体、構造体内の構造体の配列にメモリを適切に割り当て、その配列をパラメータとして渡す方法

分類Dev

構造体、構造体内の構造体の配列にメモリを適切に割り当て、その配列をパラメータとして渡す方法

分類Dev

Azureパイプライン:変数をパラメーターとしてテンプレートに渡す

分類Dev

構造体をパラメーターとしてメソッドに送信し、構造体を返す方法は?

分類Dev

構造体のスライスをテンプレートに渡してGolangで反復する方法は?

分類Dev

Swift構造体をパラメーターとしてObjective-Cメソッドに渡す方法

分類Dev

構造体をパラメーターとして使用する

分類Dev

SFINAEを使用した関数テンプレートのパラメーターとしての構造体の転送参照

分類Dev

別の構造体がメンバーとして共用体にラップされている構造体が、明示的なデフォルトコンストラクターなしでコンパイルされないのはなぜですか?

分類Dev

go langのパラメーターとして関数に構造体を渡す方法

分類Dev

パラメータとして特定の構造体を使用したトレイトの実装

Related 関連記事

  1. 1

    テンプレートクラス/構造体のメンバー関数アドレスを関数パラメーターとして渡す

  2. 2

    テンプレート引数として一時構造体を渡す

  3. 3

    実行時にオプションの不明なパラメータを渡す

  4. 4

    実行時にオプションの不明なパラメータを渡す

  5. 5

    テンプレートメソッドc ++で構造体パラメータを渡す

  6. 6

    テンプレートパラメータを構造体のようなものに保存する方法は?

  7. 7

    構造体をパラメータとして関数に渡す方法

  8. 8

    構造体配列をパラメータとして関数に渡す

  9. 9

    構造体のインスタンスにメソッドをパラメータとして渡す

  10. 10

    構造体を値パラメーターとしてスレッドに渡す

  11. 11

    関数テンプレートパラメーターとしてのC ++構造体関数

  12. 12

    ネストされた構造体配列をパラメーターとして関数に渡す方法は?

  13. 13

    可変個引数テンプレートパラメータで構造体を使用すると、2つのテンプレートが同時にインスタンス化されるのはなぜですか?

  14. 14

    定義されたクラスをテンプレートパラメータ内の構造体として宣言します

  15. 15

    テンプレートパラメータリストを含むstlコンテナを構造体に渡す

  16. 16

    不明なタイプのクラスのテンプレートパラメーターとして関数を渡す

  17. 17

    C ++で追加のテンプレートパラメータを使用してテンプレート構造体を拡張する

  18. 18

    Golang:構造体を関数のパラメーターとして渡す

  19. 19

    構造体、構造体内の構造体の配列にメモリを適切に割り当て、その配列をパラメータとして渡す方法

  20. 20

    構造体、構造体内の構造体の配列にメモリを適切に割り当て、その配列をパラメータとして渡す方法

  21. 21

    Azureパイプライン:変数をパラメーターとしてテンプレートに渡す

  22. 22

    構造体をパラメーターとしてメソッドに送信し、構造体を返す方法は?

  23. 23

    構造体のスライスをテンプレートに渡してGolangで反復する方法は?

  24. 24

    Swift構造体をパラメーターとしてObjective-Cメソッドに渡す方法

  25. 25

    構造体をパラメーターとして使用する

  26. 26

    SFINAEを使用した関数テンプレートのパラメーターとしての構造体の転送参照

  27. 27

    別の構造体がメンバーとして共用体にラップされている構造体が、明示的なデフォルトコンストラクターなしでコンパイルされないのはなぜですか?

  28. 28

    go langのパラメーターとして関数に構造体を渡す方法

  29. 29

    パラメータとして特定の構造体を使用したトレイトの実装

ホットタグ

アーカイブ