通常的C++程序,函數的返回值是確定的類型,那么為什么需要通過invoke_result來聲明函數的返回值類型呢?
用一個簡單但不一定實際的例子進行說明:
#include <iostream>
using namespace std;int funcAdd(int a, int b)
{return a + b;
}int wrapFuncAdd(int a, int b)
{return funcAdd(a, b);
}int main()
{cout<<wrapFuncAdd(1, 2)<<endl;return 0;
}
這是一段平淡無奇的程序,但是假如有一天,funcAdd(也許是在另一個文件中定義的)被修改了類型為:
string funcAdd(int a, int b)
那么程序的編譯將會報錯。
可以通過invoke_result解決這個問題
#include <iostream>
#include <string>
#include <type_traits>
using namespace std;string funcAdd(int a, int b)
{return to_string(a + b);
}auto wrapFuncAdd(int a, int b) -> invoke_result<decltype(funcAdd), int, int>::type
{return funcAdd(a, b);
}int main()
{cout<<wrapFuncAdd(1, 2)<<endl;