首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何自动输入函数调用的结果?

如何自动输入函数调用的结果?
EN

Stack Overflow用户
提问于 2013-08-12 16:25:09
回答 3查看 112关注 0票数 1

我想避免像这样的工厂呼叫中的演员。

代码语言:javascript
复制
MyObject* O = dynamic_cast<MyObject* >( Factory->Create("MyObject") );

有可能做到吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-12 16:32:56

你可以的。

代码语言:javascript
复制
struct sInstantiationProxy
{
private:
    void* Obj;
    sInstantiationProxy( void* O ): Obj( O ) {};
public:
    template<typename T> operator T()
    {
        return reinterpret_cast<T>( Obj );
    }
};

后来:

代码语言:javascript
复制
sInstantiationProxy Create( const std::string& ClassName ) const
{
    return sInstantiationProxy( Factory->Create( ClassName ) );
};

现在您可以不用Create()使用全局dynamic_cast函数了。

代码语言:javascript
复制
MyObject* O = Create( "MyObject" );
票数 2
EN

Stack Overflow用户

发布于 2013-08-12 16:28:10

Create方法成为一个模板?

代码语言:javascript
复制
template<typename T>
T* Create(const std::string& name) const
{
    return new T;  // Or what you want to do
}

那你就可以

代码语言:javascript
复制
auto o = Factory->Create<MyObject>("MyObject");
票数 9
EN

Stack Overflow用户

发布于 2013-08-12 16:40:00

使其返回带有模板化类型转换运算符的helper对象。

代码语言:javascript
复制
class Helper
{
  void* obj;
public:
  template <class T> operator T()
  {
    return reinterpret_cast<T>(obj);
  }
  .... Constructors etc
};

为了获得额外的奖励,让它包含对象的类型,并检查它是否与T的类型匹配。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18192012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档