簡體   English   中英

運行時的C ++變量類型

[英]C++ variable type at runtime

我正在嘗試存儲從文件中讀取的一些數據。 數據是一個數組,可以是幾種類型之一。 short,float等。我試圖將這些數據抽象到一個類中,所以我立即想到:

class BaseData {
public:
    void *data;
    virtual void foo() = 0;
};

template <typename T>
class Data : public BaseData {
public:
    T *data;

    Data(const File *file) {
        data = (T*) file->data;
    }

    T operator()(int x, int y, int z) {
       return data[x + y*yd + z*zd];
    }

    void foo() {}
};

在讀取文件以實例化正確的對象時,然后當我想使用不同的Data對象時,我使用switch語句:

if (Data<short> *d = dynamic_cast<Data<short> *>(image->data)) {
   cout << (*d)(100, 50, 100) << endl;
}

其中image-> data類型為BaseData

您對此有何想法? 這是做事情的正確方法嗎? 理想情況下,我想獲取數組(和類型)並對其進行處理,但是我不知道在編譯時類型將是什么。

您對此有何想法? 這是做事情的正確方法嗎? 理想情況下,我想獲取數組(和類型)並對其進行處理,但是我不知道在編譯時類型將是什么。

是的,總的來說,像您所做的那樣創建參數化多態包裝是一種很好的方法。 它類似於boost::any所例示的“ Any”設計模式,並將運行時類型信息附加到其他不相關的非多態類型,例如int,float等。

您還應該查看boost::variant ,這是一種類似但略有不同的方法。 在變體中,類型集成為Base的模板參數。 作為專家,這允許進行一些附加的編譯時檢查,並且還可以實現稍微更有效的實現,因為它具有可以說更復雜的接口。

暫無
暫無

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

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