Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

例子

Optional 返回值
Optional 局部變量
Optional 數據成員
避免不必要的昂貴的缺省構造
optional<char> get_async_input()
{
    if ( !queue.empty() )
        return optional<char>(queue.top());
    else return optional<char>(); // 未初始化
} void receive_async_message() { optional<char> rcv ; // 此處使用了從 'rcv' 到布爾值的安全轉換。
while ( (rcv = get_async_input()) && !timeout() ) output(*rcv); }
optional<string> name ;
if ( database.open() )
{
    name.reset ( database.lookup(employer_name) ) ;
}
else
{
    if ( can_ask_user )
        name.reset ( user.ask(employer_name) ) ;
}

if ( name )
    print(*name);
else print("employer's name not found!");
class figure
{
    public:

    figure()
    {
        // 此處數據成員 'm_clipping_rect' 未初始化。
} void clip_in_rect ( rect const& rect ) { .... m_clipping_rect.reset ( rect ) ; // 此處初始化。
} void draw ( canvas& cvs ) { if ( m_clipping_rect ) do_clipping(*m_clipping_rect); cvs.drawXXX(..); } // 可以返回 NULL.
rect const* get_clipping_rect() { return get_pointer(m_clipping_rect); } private : optional<rect> m_clipping_rect ; };
class ExpensiveCtor { ... } ;
class Fred
{
    Fred() : mLargeVector(10000) {}

    std::vector< optional<ExpensiveCtor> > mLargeVector ;
} ;

PrevUpHomeNext