作者LoganChien (简子翔)
看板EE_DSnP
标题Re: [闲聊] VOID POINTER OPERATOR
时间Mon Dec 28 22:10:17 2009
其实这个叫作 unspecified_bool,有很多种其怪的写法,光是 BOOST
函式库就有三种。我觉得还颇有趣的。不过这种东西好像是在帮编译
器出考题一样。
简单版: cast to void const *
class Even
{
int i;
public:
Even(int i_) : i(i_) {}
operator void const * () const { return (i % 2 == 0) ? this : 0 ; }
};
进阶版: cast to member selector
class Even
{
int i;
typedef int (Even::*member_selector);
public:
Even(int i_) : i(i_) {}
operator member_selector () const { return (i % 2 == 0) ? &Even::i : 0 ; }
};
高阶版: cast to member function selector
class Even
{
int i;
typedef int (Even::*unspecified_bool_t)() const;
public:
Even(int i_) : i(i_) {}
int get() const { return i; }
operator unspecified_bool_t () const
{
return (i % 2 == 0) ? &Even::get : 0 ;
}
};
非常强大版: cast to static member function selector
class Even
{
int i;
private:
static void unspecified_bool(Even ***) {}
typedef void (*unspecified_bool_t)(Even ***);
public:
Even(int i_) : i(i_) {}
operator unspecified_bool_t ()
{
return (i % 2 == 0) ? unspecified_bool : 0;
}
};
ref. Boost SmartPtr Lib
http://tinyurl.com/yh5vh8r
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.247.159
1F:推 ric2k1:推! 感谢分享! 12/28 22:19