採取的答案從這裏:iterate over tuple關於打印std::tuple
成分,這裏是代碼:視覺工作室 - 性病解決方法錯誤c2770 :: enable_if
template<std::size_t I = 0, typename... Tp>
typename std::enable_if<I == sizeof...(Tp), void>::type
print(const std::tuple<Tp...>& t)
{ }
template<std::size_t I = 0, typename... Tp>
typename std::enable_if<I < sizeof...(Tp), void>::type
print(const std::tuple<Tp...>& t)
{
std::cout << std::get<I>(t) << std::endl;
print <i, Tp...> (t);
}
此編譯和完美的作品在GCC,但無法編譯在VC++(我使用Visual Studio 2013)。錯誤我在流汗:
Error 4 error C2893: Failed to specialize function template 'std::enable_if<I==1,void>::type print(const std::tuple<_Types1...> &)'
Error 3 error C2770: invalid explicit template argument(s) for 'std::enable_if<I<1,void>::type print(const std::tuple<_Types1...> &)'
appearntly上有C2770一中的缺陷利用std::enable_if
具有明確的模板參數時。一些開發商利用const int
作爲預參數爲模板
const int i = I+1;
print<i,Tp...>(t);
推薦但這也不管用。 還有其他的解決方案,如使用一些宏,但它們也失敗了。
有人有解決它的方法嗎?我搜索了一個解決方案,但沒有發現任何實際的工作。
謝謝。
工作對我來說在VS2015 RC。發佈(希望)即將推出,所以工具鏈升級可能是非標準的,但也是可行的選擇。 (在VS2015中甚至沒有提到'constexpr',更快的編譯和鏈接等) – Drop
感謝他們修正了它:) :) –