模板自动生成的代码,而不是类型

时间:2013-05-21 18:07:43

标签: c++ templates gcc auto-ptr

我正在尝试生成一个类,而不是可以读取任何类型的序列化XSD / XML代码。由于我有大约1000种不同的数据定义,我很乐意将XmlLoader类设为通用。

但是,在自动生成的序列化代码中,我很难掌握获取内存数据指针的方法。

代码:

template <class XmlType>
class XmlLoader {
public:

    XmlLoader(const std::string &filename, const std::string &xsd) :
    filename(filename),
    xsd(xsd) {
        try {
            this->initialize();
        } catch (const xml_schema::exception &e) {
            ERROR("Unable to parse [%s], aborting\n", filename.c_str());
        } catch (const std::invalid_argument &e) {
            ERROR("Unable to locate [%s], aborting\n",
                    std::string(Component::getJarssXSDDirectory() + xsd).c_str());
        }
    }

    std::auto_ptr<XmlType> xmlInstance;

private:

    void initialize() {

        std::string schema = Component::getJarssXSDDirectory() + xsd;
        if (!Application::validatePath(schema)) {
            throw std::invalid_argument("XSD cannot be found");
        }

        xml_schema::properties props;
        props.no_namespace_schema_location(schema);
        xmlInstance = std::auto_ptr<XmlType > (XmlType_(filename, 0, props));
    }

    std::string filename;
    std::string xsd;
};

问题出在这一行:xmlInstance = std::auto_ptr<XmlType > (XmlType_(filename, 0, props));

如果我是亲手做的话,它看起来像是:

xmlInstance = std::auto_ptr<XmlType>(XmlType_(filename, 0, props));

注意XmlType上函数的_

当我尝试对此进行模板化时,编译器声明XmlType_不是类型,也不包含在参数模板中。

由于XmlType_不是类型,它是XSD序列化程序生成的函数,如何通过模板传递?我以前从未遇到过这样的事情。

有什么想法吗?

0 个答案:

没有答案