2015-02-11 36 views
2

我不知道我是否可以做這樣的事情:有沒有辦法將C++數據類型作爲變量返回?

return int 

所以我不希望返回一個int類型的變量,但定義了int類型本身。

如果您想知道這是否有用:我喜歡將HDF5數據類型轉換爲正常的C++數據類型。所以我喜歡使用方法或散列表,它爲我返回任何給定HDF5數據類型的C++數據類型。

+0

不,這是不可能的,但你可以返回一個*值*,它表示它是一個'int'。閱讀更多關於如枚舉。 – 2015-02-11 14:36:04

+4

這聽起來像是一個XY問題,你到底想要達到什麼目的?我能想到的最接近的就是'typedef'。 – 2015-02-11 14:36:05

+0

你將如何聲明一個返回該函數的函數?它的返回類型是什麼? – 2015-02-11 15:24:34

回答

1

「變量」是C++中的一個特定術語,而不是您要查找的內容。這就是說,答案是肯定的,但它需要一些打字:

template<typename T> 
class HDF2CPP { }; 

template<> 
class HDF2CPP<H5::IntType> { using type = int }; 
template<> 
class HDF2CPP<H5::StrType> { using type = std::string }; 
// ... 

對於任何給定HDF類型THDF2CPP<T>::type會給你從上面的列表中的相應的C++類型。

0

爲了我最好的猜測,我收集你正在獲得價值和它的HDF5數據類型(無論是從文件或數據庫等),你想分配的值,以適當的數據類型在c + +。

不幸的是,沒有捷徑可以做到這一點,因爲你似乎在思考。一般做法是形成一個結構,將成員類型映射到每個列類型,並在適當轉換後分配傳入數據。

HDF5數據類型及其關聯的C類型給出here

然後你的C代碼可能與此類似:

struct 
{ 
    char MyChar; 
} MyRecord; 

if (strcmp (strDataType, "H5T_NATIVE_CHAR") == 0) 
    MyRecord.MyChar = strValue[0]; 

這是非常基本的。爲了增強和使用C++,可以使用運算符重載使其成爲C++ ish。

相關問題