カスタム構造体を別のテンプレートタイプにキャストする

Wusiki Jeronii
template <typename T>
struct Colordata
{
public:
    T *data;
    unsigned long size;
    unsigned long length;

    template <size_t N>
    Colordata(T (&arr)[N])
    {
        length = N;
        size = sizeof(arr);
        T dataArr[length];
        for (int i = 0; i < N; i++)
        {
            dataArr[i] = arr[i];
        }
        data = dataArr;
    }
    template <typename TCast>
    operator TCast() const
    {
        TCast dataCastTmp[length];
        for (int i = 0; i < length; i++)
        {
            dataCastTmp[i] = (TCast)data[i];
        }
        return Colordata<TCast>(dataCastTmp);
    }
};

int main(int argc, char const *argv[])
{
    int arr[] = {12, 434, 54};
    auto a = Colordata<int>(arr);
    auto b = (float)a;
    return 0;
}

私が変換しようとしたときStruct<typename>Struct<another typename>別の型名は存在しません。私はそう思います 'cos私はコンパイラログでエラーを受け取ります:

«Colordata :: Colordata(float [((const Colordata *)this)-> Colordata :: length])»を呼び出すための一致する関数がありません

テンプレート構造体をテンプレート構造体にキャストする方法はありますか?

トーマス

このコードには多くの問題がありますが、変換演算子の署名が原因で、あなたが尋ねた問題が発生しています。

    template <typename TCast>
    operator TCast() const

あなたがキャストにしようとするとColordata<float>、その後TCast型になりますColordata<float>、そしてないfloat実装が想定しているよう。

解決策は、他のColordataインスタンス化への変換のみを許可することです。

    template <typename TCast>
    operator Colordata<TCast>() const

今すぐTCastとなりfloat、必要に応じて、あなたが一歩近づく正しいコードにしています。


その他の問題は、可変長配列(C ++ではサポートされていません)の使用、およびスコープを超えて未定義の動作につながるローカル変数へのポインターの格納です。std::vector生活をより簡単かつ安全にするために使用します。

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

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

編集
0

コメントを追加

0

関連記事

構造体ポインタを別の構造体にキャストする

C#で別のタイプにキャストするカスタム構造体

構造体をスライスのマップにカスタムアンマーシャリングする

管理者の構造体ブロックテンプレートをカスタマイズするWagtail

ある構造体を同じメンバーを持つ別のタイプにキャストするにはどうすればよいですか?

構造体を別の構造体にキャストする

LRESULTをカスタム構造体タイプにキャストするにはどうすればよいですか?

Swiftで別のC構造体の安全でないポインターにキャストする

テンプレート内のタプルを構造体に変換する

voidポインター(構造体の一部)を別のポインターデータ型にキャストする

別の構造体に移動してカスタム構造体タイプ

C ++が派生構造体を使用して親テンプレート構造体をインスタンス化し、親テンプレートが子構造体の関数を呼び出すことができるのはなぜですか?

インターフェースを元の構造体にキャストする方法{}

Userdefaults エラー swift のカスタム構造体配列にドキュメント パスを保存する

C ++テンプレートのインスタンス化中に元の構造体/クラス名を取得する

Cでポリモーフィズムを「エミュレート」するときに、構造体メンバーを使用する場合と構造体ポインターをキャストする場合の違い

Cのように、ポインターを使用してバッファーから構造体をマップしてキャストする方法

UnsafeMutablePointer <Void>を構造体タイプにキャストします

サーバーがc構造体としてデータを送信しているときに、クライアントのC ++構造体にバッファーをタイプキャストできますか?

構造体のvoidポインタを構造体にキャストしてメンバーにアクセスする

カスタム投稿タイプを処理するためのWordpressテンプレート構造を設定する方法

Python cffi構造体へのポインターをSystem.IntPtr(.NET)にキャストする方法は?

カスタムタイプを「オプション」カスタムタイプにキャストする

構造体へのポインタを最初のメンバーにキャストするには、どのタイプのC ++キャストを使用する必要がありますか?

構造体メンバーへのポインターを構造体へのポインターに合法的にキャストできますか?

名前のない構造体ポインタにポインタをキャストする方法は?

構造体を初期化するためのvoidポインタキャスト

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

静的配列、ポインター、構造体を区別するC ++テンプレート

TOP 一覧

  1. 1

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  2. 2

    CSSのみを使用して三角形のアニメーションを作成する方法

  3. 3

    ZScalerと証明書の問題により、Dockerを使用できません

  4. 4

    ドロップダウンリストで選択したアイテムのQComboBoxスタイル

  5. 5

    別のホストからTomcat Managerアプリにアクセスする

  6. 6

    PyCharmリモートインタープリターはプロジェクトタブにサイトパッケージのコンテンツを表示しません

  7. 7

    Windows 10でのUSB入力デバイスの挿入/取り外しの検出

  8. 8

    Python / SciPyのピーク検出アルゴリズム

  9. 9

    MLでのデータ前処理の背後にある直感

  10. 10

    useRefに反応してコンポーネントをスクロールして表示する

  11. 11

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  12. 12

    パンダは異なる名前の列に追加します

  13. 13

    PictureBoxで画像のブレンドを無効にする

  14. 14

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  15. 15

    Pythonを使用して、リストからデータを読み取り、特定の値をElasticsearchにインデックス付けするにはどうすればよいですか?

  16. 16

    LinuxでPySide2(Qt for Python)をインストールするQt Designerはどこにありますか?

  17. 17

    Material-UIでTextFieldエラーの色を条件付きでオーバーライドする方法

  18. 18

    goormIDEは、ターミナルがロードするデフォルトプロジェクトを変更します

  19. 19

    MatplotlibまたはSeabornを使用して、グループ化されたデータから複数のプロットを生成するにはどうすればよいですか?

  20. 20

    Luaの文字列から特定の特殊文字を削除するにはどうすればよいですか?

  21. 21

    Flutterにファイルピッカープラグインを追加するにはどうすればよいですか?

ホットタグ

アーカイブ