설명을 적지 않아 좀 그렇긴 하지만 ^^ 그래도 도움이 되시길 바랍니다.
시간이 많지 않아서요 ^^'
즐빌~하세요~
//---------------------------------------------------------------------------
#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;
}
//---------------------------------------------------------------------------
|