C++ 在Visual Studio 2012中限制函数模板类型
Visual Studio 2012中是否有任何方法将函数模板限制为特定类型 这一个在GCC中工作,但MSVC生成C++ 在Visual Studio 2012中限制函数模板类型,c++,visual-c++,visual-studio-2012,c++11,C++,Visual C++,Visual Studio 2012,C++11,Visual Studio 2012中是否有任何方法将函数模板限制为特定类型 这一个在GCC中工作,但MSVC生成错误C4519:默认模板参数仅允许在类模板上使用 #include <type_traits> template <class float_t, class = typename std::enable_if< std::is_floating_point<float_t>::value >::type> inline float_t
错误C4519:默认模板参数仅允许在类模板上使用
#include <type_traits>
template <class float_t, class = typename std::enable_if< std::is_floating_point<float_t>::value >::type>
inline float_t floor(float_t x)
{
float_t result;
//...
return result;
}
#包括
模板::类型>
内联浮动地板(浮动x)
{
浮动结果;
//...
返回结果;
}
交叉编译器解决方案是最好的。有其他选择吗?通常,您会这样写
template <class float_t>
typename std::enable_if< std::is_floating_point<float_t>::value, float_t>::type
floor(float_x x) {...}
模板
typename std::enable_if:type
地板(浮子x){…}
如果打算使用
的话,这就是启用的方式。我不会说这是启用的方式,也不会说这是正常使用的方式。这只是为了绕过VS2012在函数中不支持默认模板参数的缺陷。@Rapptz:如果打算使用,这是启用_的最初方式。默认的函数模板参数是一个新的东西,相对于enable_if.@DeadMG我不会不同意。然而,由于C++11,它通常被放置在模板参数中。无论如何,如果你的编译器缺乏对它的支持,这是一个完美的解决方法。是的,这很公平。但是声称enable_if不打算像这样使用是完全错误的。这意味着在支持默认模板参数的编译器中,我的原始解决方案更适合C++11标准?