C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[490] boost::any 2번째 시간입니다~
nicekr.황경록 [mpbox] 7152 읽음    2005-08-12 18:16
설명을 적지 않아 좀 그렇긴 하지만 ^^ 그래도 도움이 되시길 바랍니다.

시간이 많지 않아서요 ^^'

즐빌~하세요~

//---------------------------------------------------------------------------

#include <vcl.h>

#include <stdio.h>

#pragma hdrstop

#include <list>
#include <boost/any.hpp>
#include <boost/shared_ptr.hpp>

using boost::any_cast;
using boost::shared_ptr;

typedef std::list<boost::any> many;

//---------------------------------------------------------------------------

class TZPacket
{
public:
    TZPacket() {};

    AnsiString sayHello() { return AnsiString("Hello!"); }
};

typedef boost::shared_ptr<TZPacket> ZPacket;
typedef boost::any ANY_PARAM;

#pragma argsused

many mylist;

void addElement( ANY_PARAM pElement )
{
    //boost::any anyValue = pElement;

    mylist.push_back( pElement );
}

int main(int argc, char* argv[])
{
    ZPacket a( new TZPacket() );

    //boost::any any = AnsiString("A1");
    //mylist.push_back(any);
    //any = a;
    //mylist.push_back(any);

    printf("use count : %d\n", a.use_count());

    addElement( AnsiString("A1") );
    addElement( a );

    printf("use count : %d\n", a.use_count());

    addElement( int(1) );
    addElement( int(100) );
    addElement( int(1000) );
    addElement( int(10000) );
    addElement( int(2) );

    many::iterator iter;

    for( iter = mylist.begin(); iter != mylist.end(); iter++ )
    {
        /*
        try
        {
            //any_cast<AnsiString>(*iter) ;
            printf("%s\n", any_cast<AnsiString>(*iter) );
        }
        catch( Exception &e )
        {
            printf("Error\n");

            break;
        }
        catch( const boost::bad_any_cast & )
        {
            printf("boost::bad_any_cast\n");
        }
        */

        if( (*iter).type() == typeid(ZPacket) )
        {
            printf("index %d = ZPacket sayHello = %s\n", iter, any_cast<ZPacket>(*iter)->sayHello());
        }

        if( (*iter).type() == typeid(AnsiString) )
        {
            printf("index %d = AnsiString = %s\n", iter, any_cast<AnsiString>(*iter));
        }

        if( (*iter).type() == typeid(int) )
        {
            printf("index %d = int = %d\n", iter, any_cast<int>(*iter));
        }
    }

    system("pause");

    return 0;
}
//---------------------------------------------------------------------------

+ -

관련 글 리스트
490 boost::any 2번째 시간입니다~ nicekr.황경록 7152 2005/08/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.