我想避免像这样的工厂呼叫中的演员。
MyObject* O = dynamic_cast<MyObject* >( Factory->Create("MyObject") );有可能做到吗?
发布于 2013-08-12 16:32:56
你可以的。
struct sInstantiationProxy
{
private:
void* Obj;
sInstantiationProxy( void* O ): Obj( O ) {};
public:
template<typename T> operator T()
{
return reinterpret_cast<T>( Obj );
}
};后来:
sInstantiationProxy Create( const std::string& ClassName ) const
{
return sInstantiationProxy( Factory->Create( ClassName ) );
};现在您可以不用Create()使用全局dynamic_cast函数了。
MyObject* O = Create( "MyObject" );发布于 2013-08-12 16:28:10
让Create方法成为一个模板?
template<typename T>
T* Create(const std::string& name) const
{
return new T; // Or what you want to do
}那你就可以
auto o = Factory->Create<MyObject>("MyObject");发布于 2013-08-12 16:40:00
使其返回带有模板化类型转换运算符的helper对象。
class Helper
{
void* obj;
public:
template <class T> operator T()
{
return reinterpret_cast<T>(obj);
}
.... Constructors etc
};为了获得额外的奖励,让它包含对象的类型,并检查它是否与T的类型匹配。
https://stackoverflow.com/questions/18192012
复制相似问题