c++ - 功能访问限制

标签 c++ c++11 traits typetraits

<分区>

我有一个带有函数的泛型类,我想在编译时将其限制为仅浮点类型的实例。如下例所示:

template <typename T>
class ClassName
{
    // instance variables, etc..

    void some_method()
    {
        // do stuff, but only for floating point types
    }
}

如何让编译器拒绝对非浮点类型的类名使用 some_method?

我一直在研究 SFINAE,但我就是无法让它工作,所以在失败几个小时后,我请求你的帮助。

谢谢:)

最佳答案

您可以结合使用 std::is_floating_pointstd::enable_if 来仅启用浮点类型的函数:

#include <type_traits>

template <typename T>
class ClassName
{
    // instance variables, etc..
 public:
  template<typename T2 = T,
           typename = typename std::enable_if< std::is_floating_point<T2>::value >::type>
  void some_method()
  { 
    // do stuff, but only for floating point types
  } 
};

int main()
{
  ClassName<double> d; // OK
  d.some_method();     // OK
  ClassName<int> i;    // OK
  i.some_method();     // ERROR
}

关于c++ - 功能访问限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18108600/

相关文章:

c++ - 在结构或类中使用智能指针

c++ - 为什么 GCC 优化掉这个增量?

c++ - C++ 的异常处理准则

c++ - 处理派生类指针 vector 的正确方法?

c++ - 在排序列表中恰好找到 N 个连续的

Scala 的特征混合调用链

php - php 中是否可以获取使用特定特征的类列表?

scala - 特征的多个类型实例中的类型差异

c++ - 我怎么知道确切的异常类型?

c++ - NULL vs nullptr(为什么被替换了?)