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

c – 在bool值上从模板类重载成员

发布时间:2020-12-16 10:04:42 所属栏目:百科 来源:网络整理
导读:我试图避免在我的项目的主分支上的概念,所以我需要一些与type_trait的替代: 我需要一个类,根据bool值,一些函数会改变. 有人已经建议我分开我的班级,但这种情况在这里没有意义.对于某些上下文,它是一个池,其中删除函数,如果可以共享池的对象类型,则其他一些
我试图避免在我的项目的主分支上的概念,所以我需要一些与type_trait的替代:

我需要一个类,根据bool值,一些函数会改变.

有人已经建议我分开我的班级,但这种情况在这里没有意义.对于某些上下文,它是一个池,其中删除函数,如果可以共享池的对象类型,则其他一些将更改.

所以我尝试使用std :: enable_if,但仍然存在一些错误(我希望声明和实现是分开的).

#include  <type_traits>

template < typename Object,bool Shared = false >
class Foo {

  template < bool S = Shared,typename std::enable_if<S>::type* = nullptr >
  void   bar();

  template < bool S = Shared,typename std::enable_if<!S>::type* = nullptr >
  void   bar();
};

template < typename Object,bool Shared >
template < bool S,typename std::enable_if<S>::type* = nullptr >
void   Foo<Object,Shared>::bar() {
    //do something
}


template < typename Object,typename std::enable_if<!S>::type* = nullptr >
void   Foo<Object,Shared>::bar() {
  //do nothing
}

int main() {

  Foo<int> test;
  return 0;
}
Test3.cpp:16:33: error: default argument for template parameter for class enclosing ‘void Foo<Object,Shared>::bar()’
 void   Foo<Object,Shared>::bar() {
                                 ^
Test3.cpp:24:33: error: default argument for template parameter for class enclosing ‘void Foo<Object,Shared>::bar() {

编辑:删除了复制/粘贴错误

解决方法

1.对于类定义中的成员函数声明,应删除类名的限定(即Foo< Object,Shared>::).

2.Default template arguments不允许用于成员模板的类外定义,只需删除它们即可.

Default parameters are not allowed

  • in the out-of-class definition of a member template (they have to be
    provided in the declaration inside the class body)

然后

template < typename Object,typename std::enable_if<S>::type* = nullptr >
  void  bar();

  template < bool S = Shared,typename std::enable_if<!S>::type* = nullptr >
  void  bar();
};

template < typename Object,typename std::enable_if<S>::type*  >
void   Foo<Object,Shared>::bar() {
    //do something
}

template < typename Object,typename std::enable_if<!S>::type* >
void   Foo<Object,Shared>::bar() {
  //do nothing
}

LIVE

(编辑:李大同)

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

    推荐文章
      热点阅读