我有一個類初始化類對象進行操作,說如何動態創建方法,在運行時
class AddElement{
int a,b,c;
}
用的方法來設置/獲取A,B,C ......我的問題絕對是個邏輯問題 - 我說的addElement實現如下:
int Value=1;
Value+=AddElement.get_a()+AddElement.get_b()+AddElement.get_b();
現在想象一下,我想要做的,除了上述「A,b,C」現在陣列和的,而不是「加」我做的標量增加。在運行時有時我需要「一個」,但不能「b」或「c」的,所以我可以改寫爲:
Value+=AddElement.get_a();
(當然,+ =過載來表示標量加法...和值是相同的大小a) - 其他時間,我可能只需要b或c被添加等...
有沒有辦法去選擇哪些元素,a,b,c,我想要初始化並在以後在運行時使用? (即,如果我不打算使用它,我不想malloc一個巨大的數組)。
最後我需要一個具有a,b,c的類,然後可以對a,b或c的任意組合進行操作的類 - 讓用戶在運行時定義他們需要的方法(通過某種標誌或配置文件)。
目前我做了以下內容:
Value+=AddElement.get_a()*FlagA+AddElement.get_b()*FlagB+AddElement.get_c()*FlagC;
其中FLAGA = 1,如果你想用「A」中添加或0,如果你不希望它被包含(同爲FlagB和FlagC)。如果數組'a'非常大,這是昂貴的。
我可能只是不夠努力,但這個問題一直困擾着我。如果你需要我更好地定義這個問題,我會盡力,但我相信這足以讓我的觀點得到解決。
編輯2 我還忘了補充一點,另外的實施過程中,我可以不使用任何條件語句(這會在CUDA內核使用,我不能有任何線程diverngance - 我希望避免提及CUDA,因爲這完全是一個C++的問題)
編輯3 我相信什麼,我需要做的就是使用虛擬功能。我想以相同的方式調用函數,除非它執行特定於案例的功能。
編輯4 如果有人拍了一下我的解決方案,我將不勝感激 - 也許它太「異國情調」,有一個更簡單的實現同樣的目的方法。感謝所有的建議!
編輯5 感謝其他用戶,我查看了戰略設計模式 - 這正是我用於解決此問題的解決方案。之前我從來沒有聽說過這個消息,最終反思了一個已經完成的問題(花了一段時間讓某個人提到它)。所以解決方案: 在運行時確定算法=戰略設計模式。
答案真的取決於您是否期望在將來會超過三個元素 - 即,如果您需要可擴展的解決方案或最佳的最快解決方案。另外,你的代碼有很多方面我不明白 - malloc?爲什麼你會用C++中的new來使用malloc?和(a)一樣?大多數C++用戶希望看到get_a()或類似的東西。 – Puppy 2010-10-25 14:59:25
對於malloc感到抱歉,正如我所提到的,我正在使用CUDA(這是基於C的...),並且通常陣列在CPU和GPU之間進行復制時需要使用malloc。所以我想我說的是我需要它被優化和擴展......是的,會有比a,b和c更多的元素,但是我在將來我知道我不會去需要所有a,b,c,d ... n - 通常我可能只需要1或2個這些元素,但我不希望每次都重新編譯這些特定情況。 – Marm0t 2010-10-25 15:04:49
您正在阻止我們提供一些信息,這些信息對於幫助您解決問題至關重要。主要的問題是你不能使用條件,這意味着你不能循環。但是你確實有一個總結數組的機制,可能是一個彙編指令集。我相信你需要使用相同的機制來解決這個問題,但不知道沒有更多的信息我可以幫忙。 – yonilevy 2010-10-25 15:42:31