c语言中exists怎么用,在gnu c ++中是否存在__if_exists的等价物?

Matthieu M...

5

在我看来,这是一个糟糕的关键词......

不幸的是,据我所知,它并不存在于gcc中,但我可能根本就不知道它.

正确的C++处理方法是通过使用Concepts,即根据某些要求调整类型上的操作.

通常,它是通过traits而不是真实的概念来实现的,因为它更容易实施:

template

struct has_dump: boost::mpl::false_ {};

然后通过专门化has_dump结构来转储启用类型.

最简单的是定义3个方法,一个用于路由,另外两个用于执行不同的分支:

template

void dump(T& t, boost::mpl::true_ const& dummy)

{

t.Dump();

}

template

void dump(T& t, boost::mpl::false_ const& dummy)

{

std::cout << typeid(T).name() << " does not have Dump\n";

}

template

void dump(T& t) { dump(t, has_dump()); }

类型特征的另一个用途是与enable_if设施一起使用:

template

typename boost::enable_if< has_dump >::type dump(T& t)

{

t.Dump();

}

// disable_if exists too...

这里,如果类型没有has_dump启用,则可以获得编译时错误,而不是运行时错误消息,不确定是否需要.

然而,这两种方法都非常麻烦,因为检测不是自动化的.这就是Boost.Concept库的原因.

我们的想法是,检查将由一个Concept对象执行,该对象是为了测试需求而创建的,因此您不必再专门化特征,这使得开发更容易.但是我总是发现Boost.Concept的文档有点缺乏.

好吧,出于我的目的,您的选择也太复杂了,但是如果几天之内没人提出真正简单的“是”,我将接受您的回答为“否”。 (2认同)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值