加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 限制访问功能

发布时间:2020-12-16 10:40:46 所属栏目:百科 来源:网络整理
导读:参见英文答案 std::enable_if to conditionally compile a member function????????????????????????????????????6个 我有一个带有函数的泛型类,我想在编译时将其限制为浮点类型的实例.如下例所示: template typename Tclass ClassName{ // instance variab
参见英文答案 > std::enable_if to conditionally compile a member function????????????????????????????????????6个
我有一个带有函数的泛型类,我想在编译时将其限制为浮点类型的实例.如下例所示:

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

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

如何让编译器拒绝some_method用于非浮点类型的ClassName?

我一直在看SFINAE,但我根本无法让它工作,所以经过几个小时的失败后,我正在寻求你的帮助.

谢谢 :)

解决方法

您可以使用std :: is_floating_point和std :: 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
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读