2013-07-27 104 views
3

在Visual Studio 2012中有什麼方法將函數模板限制爲特定類型?在Visual Studio 2012中限制函數模板類型

這一個在GCC工作,但MSVC生成error C4519: default template arguments are only allowed on a class template

#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; 
} 

交叉編譯器解決方案將是最好的。任何選擇?

回答

3

通常情況下,你會寫爲

template <class float_t> 
typename std::enable_if< std::is_floating_point<float_t>::value, float_t>::type 
    floor(float_x x) {...} 

那怎麼enable_if旨在使用。

+4

我不會說這是如何使用enable_if或如何正常使用。這只是爲了繞過VS2012缺乏對函數中默認模板參數的支持。 – Rapptz

+1

@Rapptz:這是enable_if旨在被使用的原始方式。相對於enable_if,默認的函數模板參數是一個新事物。 – Puppy

+1

@DeadMG我不會不同意。但是由於C++ 11通常放置在模板參數中。無論如何,如果你的編譯器不支持它,這是一個完美的解決方法。 – Rapptz

相關問題