我想推導函數的返回類型並將其用作成員函數的返回類型。爲此,我使用decltype表達式。但我所有的嘗試都失敗了編譯,如果給定函數需要一個引用作爲參數:如何推斷函數的返回類型,它需要參考作爲參數
- 我不能用我的類中的任何成員變量在decltype表達,因爲編譯器會抱怨,有沒有這樣的成員(見
func1
以下) - 我不能使用臨時的函數參數,因爲該功能需要一個參考,你不能一個非const左值參考綁定到一個臨時的(見下文
func2
)
我也嘗試過各種鑄造運營商要把參考拿到臨時,但似乎沒有是一個有效的表達。
下面一個代碼示例:
template<typename data_type, typename functor_type>
class MyClass
{
public:
auto func1() -> decltype(functor_type::process(this->m_data)) // <--
{
return functor_type::process(m_data);
}
auto func2() -> decltype(functor_type::process(data_type{})) // <--
{
return functor_type::process(m_data);
}
private:
data_type m_data;
};
struct Functor
{
static int process(int& a) { return a; }
};
int main()
{
MyClass<int, Functor> m;
int b = m.func1();
int c = m.func2();
}
對於'func1'一個工作,之前移動m_data'的'的聲明。 [實施例](http://coliru.stacked-crooked.com/a/53dcd44b0bc75005) – jrok