C#有泛型函數類型,如Action<T>
或Func<T,U,V,...>
C#式動作<T>,Func鍵<T,T>等C++ 0x中
用C++ 0x中的出現,並有模板的typedef的和可變參數模板參數的能力,這似乎應該是可能的。
我明顯的解決辦法是這樣的:
template <typename T>
using Action<T> = void (*)(T);
然而,這並不適應函子或C++ 0x中lambda表達式,除此之外,不會出現錯誤「expected unqualified-id before 'using'
」
我的下一個嘗試是可能使用boost ::功能:
template <typename T>
using Action<T> = boost::function<void (T)>;
這並不編譯或者,出於同樣的原因。
我唯一的其他想法是STL風格模板參數:
template <typename T, typename Action>
void foo(T value, Action f) {
f(value);
}
但是,這並沒有提供一個強類型的解決方案,並且是唯一的模板函數內部相關。
現在,我會第一個承認我不是C++的人,我更喜歡認爲我是,所以很可能有一個明顯的解決方案,我沒有看到。
是否有可能在C++中擁有C#樣式的泛型函數類型?
不,不可能。不完全的。他們是不同的語言。問題是最接近的近似值*,根據您的需求*。你是否需要類型擦除,所以具有相同簽名的每個函子都顯示爲相同類型?如果是這樣,你將不得不跳過一些環節,並失去一些效率。通常,這不值得,因爲由於模板和泛型之間的差異,通常不需要*。通常,但並非總是如此。你需要什麼?除了盲目地試圖在C++中模擬C# – jalf 2010-04-26 14:19:21