函数类型

时间:2015-10-26 23:13:53

标签: c++ templates c++11 visual-c++ casting

所以我创建了一个应用程序框架,每个类基本上都继承了YObject,我的Application管理器处理任何添加到类中的对象并将它们存储在:vector Application :: ApplicationObjects `,我想做一个像

这样的函数
ObjectType* object = Application->object_of<ObjectType>();

我真的不确定如何做到这一点,我听说其中一个C ++演员阵容可以用来确定ObjectType是否来自YObject,但我&# 39;我不确定!

编辑:

因为重要的是要提出可以研究的可理解的问题或其他什么..

我试图制作的是一个模板函数,它将遍历所有可用对象,并检查当前对象是否可以转换为模板定义的类型。

1 个答案:

答案 0 :(得分:1)

我相信您可能已经找到了答案here,但如果对于遇到同样问题的其他人说明如何执行此操作可能会有所帮助。

你说你想要:

  

Make是一个模板函数,它将循环遍历所有可用对象并检查当前循环对象是否可以取消引用到模板定义类型

所以让我们首先假设你有vector<YObject*> Application::m_foo中所有可用对象的指针,并且指向Application::m_foo中的一堆不同对象。

您需要像这样设计模板化的类:

template<typename T>
T* Application::object_of() {
    T* result = nullptr;

    for(auto& i : m_foo) {
        T* bar = dynamic_cast<T*>(i);

        if(bar != nullptr) {
            result = bar;
            break;
        }
    }
    return result;
}

你可以在这里看到一个hacky示例:http://ideone.com/J4oA1j我说“hacky”导致而不是拥有Application类我刚刚使用了一个全局变量,而我从不{{1}我的delete。但我相信这个想法很明确。