2012-10-16 27 views
0

假設我需要在一個過程中實現至少5個隊列,每個隊列都來自不同的定義類型。如何以簡單和短的方式來實現這一點?在Fortran中實現一組隊列的簡單方法?

看到這個問題的另一種方式是我找到的方式:在fortran中定義我自己的結構之後,我不得不用C++編寫程序,然後我看到使用模板......現在,我想在我的母語一樣的....

看來,知識並不總是舒適

非常感謝!

+1

你的問題有點不清楚。你的意思是你想創建5個隊列,每個隊列包含相同類型的'對象'?也許你可以發佈你的(僞)代碼來闡明。 –

+0

我的意思是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

回答

0

如果你真的想要模板,有Pyf95++。它爲Fortran提供了使用預處理器的模板和STL。 (用於下載here

使用transfer()的通用鏈接列表可在FLIBS中找到。

(否則有前沿編譯器,你可以使用無限的多態性由Richard Lozes的建議。)

+0

好主意!!我看着Pyf95 ++程序,聽起來很有趣,在我看來,這是一個完美的計劃,可以在下一個標準中提升Fortran。但是我發現FLIBS的方式非常有用和簡單。其實我用一些預處理器變量來簡化代碼。現在一切都很好,我有我的fortran模板!我很高興。非常感謝!!! – alexis

+0

我發佈我的代碼在這個頁面http://www.alexispaz.com.ar/fotran-templates,如果你想看看。 – alexis

1

你有沒有考慮過無限的多態指針?例如,見「現代Fortran解釋」第269頁。

+0

這可能是一種方式,但沒有相關的懲罰?我感覺每個節點中有不同類型的列表是非常自由的列表,因爲您不知道接下來會發生什麼。我在 http://www.pgroup.com/lit/articles/insider/v3n2a2.htm 看到了這個列表的一個例子,但似乎有很多嵌套的對象,是不是一個缺點? – alexis

+0

我知道沒有任何性能損失; select類型的執行方式與select case大致相同。缺點是你失去了一些類型的安全。 –

+0

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」,就完成了。 –

1

我已經實現在紅寶石的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

相關問題