假設我們有兩個種類的類最優雅可變參數算符
- 輸入類
Input
- 限定類型
result_type
- 限定
set(result_type)
- 限定類型
- 輸出類
Output
- 定義一種類型
result_type
- 限定
result_type get() const
- 具有許多
Input
類作爲成員變量,在其它的輸出取決於
- 定義一種類型
給定一個輸出類和幾個輸入類(任意數)的,考慮以下過程:
- 循環遍歷每個輸入類並調用
set()
帶一個ap propriate值(預先定義) - 在輸出類上調用
get()
並收集結果。
此過程可以被看作是對函數的調用,將輸入的值作爲參數返回輸出值。
在一般情況下編寫構造這種可變參數函數的函子。
約束條件是:C++(很可能是C++ 11),任意數量的可能不同的輸入類別Input::result_type
s。請注意,Input::result_type
未必與Output::result_type
有關。目標首先應該是效率,但如果代碼優雅可讀,則會有很大的好處。
詳細:對於那些誰不知道Output
如何與Input
,人們可以想象Input
有result_type get() const
方法爲好,它返回無論你通過set()
提供。 Output
然後有一個構造函數,它接受各種Input
s,並將它們(或它們的引用)存儲爲成員變量。 Output::get()
然後通過使用其輸入的get()
方法的返回值進行一些數學計算,並返回Output::result_type
類型的一些結果。
我並不羞於承認,我完全失去了如何輸出類*接收*輸入實例在執行前進行成員初始化並建立最終的'.get()'。我看到虛擬數組中輸入的擴展,但是他們沒有任何一個與'output'結合,也不能這樣做,因爲'output'是'const'。這就是說,這個問題非常有趣。但請注意,請求是「編寫函子」;你寫了一個*函數*。 – WhozCraig
我會在描述此鏈接的問題中添加註釋。對我來說,一個函數是一個函數,例如一個更高級的函數,一個在函數空間上工作的函數。我可能錯了。 – yannick
@yannick:在其他領域還有其他含義。但是,在C++中,函子是嚴格意義上的一個實現'operator()()'的對象,因此它可以像函數一樣呱呱叫。 – cHao