⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 factory.h

📁 网络游戏通用架构, 这是基于boost和libevent写的一个程序
💻 H
字号:
#ifndef FACTORY_H
#define FACTORY_H

#include <assert.h>
#include <string>
#include <list>
#include <vector>
#include <algorithm>
#include <iostream>
#include <fstream>
#include <boost/program_options.hpp>
#include <boost/thread/recursive_mutex.hpp>

using namespace std;
using namespace boost;
using namespace boost::program_options;

#include "common.h"
#include "class.h"
#include "dynamicfactory.h"

class EXPORT Factory
{
public:
    Factory();
    ~Factory();
public:
    void* newInstance( const string& __name );    void* newInstance( const int __type );    void addClass( ClassInterface* __class );
    void parse_types( string& __typetab_filename );
    void removeClass( const string& __name );
    bool loadFactory( const string& __filename, const string& __getFactory_func_name= "getFactory" );//return true if succeeded    void unloadFactory( const string& __filename );
protected:
    recursive_mutex _mutex;
    options_description _opt_desc;
    vector<ClassInterface*> _classes;
    list<DynamicFactory*> _factories;
protected:
    class ClassNameFindOp    {    public:    ClassNameFindOp( const string& __name ) : _name(__name) {}    bool operator() ( const ClassInterface* __class )    {        assert( __class );        return ( __class->getName()==_name );    }    const string& _name;    };
    class ClassTypeFindOp    {    public:    ClassTypeFindOp( const int __type ) : _type(__type) {}    bool operator() ( const ClassInterface* __class )    {        assert( __class );        return ( __class->getType()==_type );    }    const int _type;    };
    class FactoryFindOp    {    public:    FactoryFindOp( const string& __name ) : _name(__name) {}    bool operator() ( const DynamicFactory* __factory )    {        assert( __factory );        return ( __factory->getFilename()==_name );    }    const string& _name;    };
};


#define REGISTER( FACTORY, CLASS ) \    { \        ClassInterface* classInterface= NULL; \        try{ \            classInterface= new Class<CLASS>(#CLASS); \        }catch( exception& e ){ \            classInterface= NULL; \            cerr << "Register class failed: " << #CLASS << " as " << #CLASS << "\t(" << e.what() << ")" << endl; \        }catch( ... ){ \            classInterface= NULL; \            cerr << "Register class failed: " << #CLASS << " as " << #CLASS << "\t(" << "Unknown exception" << ")" << endl; \        } \        if( classInterface ){ \            FACTORY.addClass( classInterface ); \        } \    } \#define REGISTER_AS( FACTORY, CLASS, NAME ) \    { \        ClassInterface* classInterface= NULL; \        try{ \            classInterface= new Class<CLASS>(NAME); \        }catch( exception& e ){ \            classInterface= NULL; \            cerr << "Register class failed: " << #CLASS << " as " << NAME << "\t(" << e.what() << ")" << endl; \        }catch( ... ){ \            classInterface= NULL; \            cerr << "Register class failed: " << #CLASS << " as " << NAME << "\t(" << "Unknown exception" << ")" << endl; \        } \        if( classInterface ){ \            FACTORY.addClass( classInterface ); \        } \    } \
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -