使用__if_exists的好例子是什么?

sha*_*oth 7 c++ visual-c++

我何时使用__if_exists而不写大量糟糕的代码?

看起来这个关键字就像C预处理器指令,但是在预处理器之后处理.并且IntelliSense不解析它并将代码强调为死或活.这些共同分析了用__if_exists非常重要的代码编写的代码.

到目前为止,我发现只有一个相对安全的案例 我们有一个容器类,它接受存储对象的地址.当存储的类有重载时operator&,调用重载的运算符会导致问题.

所以我添加了以下检查:

__if_exists( T::operator& ) {
   static_assert( false );
}
Run Code Online (Sandbox Code Playgroud)

如果operator&成员函数是存储的类型,现在代码至少不会编译.

IMO这个用例非常清晰易读.

还有什么其他案例可以使用__if_exists而不会获得大量不可读的代码?

MSa*_*ers 2

我认为你可以用它来区分联合和类,因为类确实有构造函数,而联合没有。

你会想要这个在例如boost::type_traits::is_class<T>boost::type_traits::is_union<T>