2016-09-18 36 views
0

如何確定數組項是否是對另一個數組或其他類型項目(如Single)的引用。如何確定數組項是否是對其他數組(多維數組)的引用

我正在研究這個問題,因爲我想製作一個統一代碼,它將遍歷動態多維數組的所有項目,而不管數組的維數有多少。

我需要這個以確定是否需要遞歸迭代表示內部維度的數組或者我是否已經處於最內層維度。

我認爲我可能需要依靠RTTI,但我必須承認我目前還沒有使用RTTI的經驗。

+4

的有沒有辦法來發現從變量本身的信息。 http://stackoverflow.com/a/554185/33732有關將類型信息傳遞給處理任意維數組的函數的示例,請參閱RTL的SetLength實現。 –

+0

@RobKennedy不是在Delphi 6中,因爲我最初正在尋找,但它可能在德爾福的更高版本,因爲你可以在我的答案咆哮中看到。 – SilverWarior

回答

0

我已經找到解決辦法了這一點,但它僅僅是在Delphi的後續版本(上德爾福西雅圖10德爾福10.1柏林測試),它依賴於無證功能GetTypeKind,我偶然發現。

if GetTypeKind(SomeVariable) = tkArray then //Returns true if variable references to static array 

if GetTypeKind(SomeVariable) = tkDynArray then //Returns true if variable references to dynamic array 

它甚至可以用於檢查項目類型內部陣列

var Dyn2DArray: Array of Array of Integer; 

if GetTypeKind(Dyn2DArray[0]) = tkDynArray then //Returns true since item of outmost array is references to inner array 

if GetTypeKind(Dyn2DArray[0,0]) = tkDynArray then //Returns false since inner array item is of integer type 
+0

除了簡單的'TypeInfo(x)^。Kind'之外,它還能做什麼嗎?它是否真的能夠從你尚未知道類型的函數中起作用?我假設你的真實代碼將它的輸入作爲一個無類型的var參數。你上面的演示是一個你甚至不需要它的例子,因爲你可以看看聲明來得到你需要的東西。 –

+0

@RobKennedy我的真實代碼將使用此GetTypeKind來確定數組項是否是對另一個數組的引用。如果是,那麼我將遞歸調用我的函數將該數組傳遞給它。這只是使函數遍歷多維數組的所有項而不管該數組具有多少維的一個函數。所以現在我只需要弄清楚如何傳遞多維數組的最外層數組作爲過程的參數。 ... – SilverWarior

+0

...因此,我在embarcadero論壇上打開了一個問題,因爲我相信我可能會有更多的運氣,因爲我沒有發現任何通常會定義數組的類型。所以我懷疑只有Embarcadero的傢伙知道這樣的事情是否可能。 – SilverWarior

相關問題