2009年4月2日 星期四

太嫩了

這是上星期我改的某個程式片段:
template< typename ProductCreator >
class CreatorLoader {
public:
    CreatorLoader( const std::string & plugin ) : plugin_( plugin ) {}
    ProductCreator * operator()() {
        plugin::PluginContext pc;
        ProductCreator * c = qobject_cast< ProductCreator * >( pc.load( this->plugin_.c_str() ) );
        if( !c ) {
            throw Error< RunTime >( "Invalid plugin!" );
        }
        return c;
    }
private:
    std::string plugin_;
};

template< typename Product, typename CreatorFactory >
bool registerProduct( const std::string & key, const std::string & plugin ) {
    return CreatorFactory::Instance().Register( key, CreatorLoader< Creator< Product > >( plugin ) );
}

template< typename Product, typename CreatorFactory >
std::tr1::shared_ptr< Product > createProduct( const std::string & key ) {
    Creator< Product > * tmp = NULL;
    try {
        tmp = CreatorFactory::Instance().CreateObject( key );
    } catch( std::exception & e ) {
        tmp = CreatorFactory::Instance().CreateObject( "*" );
    }
    return tmp->create();
}
現在看就需要點思考時間 ... = =,還是補點註解好了。

沒有留言:

張貼留言