我試圖超載[]
運營商,所以我可以訪問std::tuple
的元素。出於某種原因,我收到以下錯誤:爲什麼我得到「在函數體外使用參數'N'」?
prog.cpp:11:73: error: use of parameter ‘N’ outside function body
prog.cpp:11:73: error: use of parameter ‘N’ outside function body
prog.cpp:11:73: error: use of parameter ‘N’ outside function body
prog.cpp:11:89: error: template argument 1 is invalid
很奇怪,因爲他們大多是第一次的重複。我不明白爲什麼我得到這個錯誤,因爲不是晚期返回類型的全部要點,以便我們可以使用返回類型的參數?
#include <tuple>
template <class... Args>
struct type_list
{
std::tuple<Args...> var;
type_list(Args&&... args) : var(std::forward<Args>(args)...) {}
auto operator[](std::size_t const N) -> typename std::tuple_element<N, std::tuple<Args...>>::type&&
{
return std::get<N>(var);
}
};
int main()
{
type_list<int, int, bool> array(2, 4, true);
}
如果任何人都可以解釋爲什麼這種情況正在發生,我怎麼能得到這個工作,這將是非常讚賞。謝謝。
想想你要的是什麼,一分鐘。您希望函數的*類型根據傳遞給它的(運行時變化的)*值*而改變?這可能會以非類型化的腳本語言飛行,但不能用C++語言。 – 2013-04-29 22:59:25