假設我需要在一個過程中實現至少5個隊列,每個隊列都來自不同的定義類型。如何以簡單和短的方式來實現這一點?在Fortran中實現一組隊列的簡單方法?
看到這個問題的另一種方式是我找到的方式:在fortran中定義我自己的結構之後,我不得不用C++編寫程序,然後我看到使用模板......現在,我想在我的母語一樣的....
看來,知識並不總是舒適
非常感謝!
假設我需要在一個過程中實現至少5個隊列,每個隊列都來自不同的定義類型。如何以簡單和短的方式來實現這一點?在Fortran中實現一組隊列的簡單方法?
看到這個問題的另一種方式是我找到的方式:在fortran中定義我自己的結構之後,我不得不用C++編寫程序,然後我看到使用模板......現在,我想在我的母語一樣的....
看來,知識並不總是舒適
非常感謝!
你有沒有考慮過無限的多態指針?例如,見「現代Fortran解釋」第269頁。
這可能是一種方式,但沒有相關的懲罰?我感覺每個節點中有不同類型的列表是非常自由的列表,因爲您不知道接下來會發生什麼。我在 http://www.pgroup.com/lit/articles/insider/v3n2a2.htm 看到了這個列表的一個例子,但似乎有很多嵌套的對象,是不是一個缺點? – alexis
我知道沒有任何性能損失; select類型的執行方式與select case大致相同。缺點是你失去了一些類型的安全。 –
USE user_module,queue_data => user_data ! \t \t \t \t \t如果user_data包含內部指針等,則使用next三個 ! queue_data_Create => user_data_create,& ! queue_data_Destroy => user_data_destroy,& ! queue_data_Copy => user_data_copy 製作5個副本,編輯每個「user_data」,就完成了。 –
我已經實現在紅寶石的FORTRAN模板,集成在我CodeMate。模板語法與C++類似。我已經實現了雙鏈表。模板定義片段如下:
...
template:list_t <type elem_t>
type list_t
integer :: num_elem = 0
type(elem_t), pointer :: head, tail
contains
...
procedure :: insert => list_insert
...
end type list
...
template:[email protected]_t <type elem_t>
subroutine list_insert(this, elem, ...)
class(list_t), intent(inout) :: this
type(elem_t), intent(out), pointer :: elem
...
end subroutine list_insert
而模板實例是如下:
type(list_t<foo_t>) foo_list
foo_t
哪裏是延伸list_elem_t<foo_t>
一個用戶定義的類型。該可以通過
call foo_list%insert(elem, ...)
我覺得我的解決方案,Fortran語言模板是很自然的元素插入到foo_list
。
你的問題有點不清楚。你的意思是你想創建5個隊列,每個隊列包含相同類型的'對象'?也許你可以發佈你的(僞)代碼來闡明。 –
我的意思是5個不同的對象的5個不同的隊列。示意圖:*** o-o-o-o O-O-O-O 0-0-0-0 @ @ @ @ @ @ ***和*** x-x-x-x ***。所以你必須聲明每個隊列和它的事件5次。我假設僞代碼可以由5個模塊組成,每個模塊都有一個非常相似的代碼,它們定義了一個隊列和相關的過程,而且每個節點中的對象都有所不同。所以5個模塊有超過100行,唯一的區別是「類型(object1):: data」必須在每個模塊中改變....所以我要求一個更短的方法。 – alexis