我想寫一個模板,它將得到一個參數作爲實例化函數的返回類型。有沒有什麼辦法可以獲得「當前函數」的返回類型
例如,假設我有一個Result
模板類:
template<type T>
class Result {
T _result_value;
T& operator=(T that);
~Result();
}
會有這一類的幾個專業。在析構函數中,我想記錄返回類型,並且在operator=
任務中,我想檢查並確定錯誤值。
理想情況下,我希望能夠有這樣的定義:
#define RESULT Result< /* decltype magic for type of current function */ >
,所以我可以使用它:
HFILE MyOpenFile(...) {
RESULT result;
}
...將被推斷爲Result<HFILE>
。這是一個簡化的例子:編寫RESULT
而不是Result<HFILE>
不是什麼大問題,但還有其他場景,其中當前函數的返回類型不容易獲得。
,你可以使用http://en.wikipedia.org/wiki/Decltype? – bobah
我想你至少必須將函數名稱傳遞給宏(例如'RESULT(MyOpenFile)'),並且在重載的情況下,你仍然會遇到不明確的地方。即使[獲取指向當前函數的指針](http://stackoverflow.com/q/2154852/1468366)也很棘手,如果不重新命名該函數,則獲得正確類型的指針似乎是不可能的。 – MvG
@MvG,你可以通過傳遞給'decltype'函數+ params來解決超載模糊問題。 'decltype(foo(b))','decltype(foo(a,b))'將正確解析。然而,這是一種痛苦。 – Nim