C ++:从字符串创建参数化指针

时间:2012-03-22 10:08:55

标签: c++ templates

我有一个遗留接口,它以字符串的形式提供实例类型,例如“int”,“float”等。

我想出了这两个函数来解决问题:

template <typename T>
T type_factory(const std::string& type_id)
{
    if (!type_id.compare("long"))
    {
        long res;
        return res;
    }

    if (!type_id.compare("double"))
    {
        double res;
        return res;
    }

    if (!type_id.compare("char"))
    {
        char res;
        return res;
    }
}

template <class PointerClass, typename T>
PointerClass<T>* pointer_factory(void* ptr, T dummy_type)
{
    return static_cast<PointerClass<T>*>(ptr);
}

//Desidered usage:
//void* raw_ptr;
//Calculator<int>* p = pointer_factory<Calculator>(raw_ptr, type_factory("int"));

第二个函数没有编译错误,是PointerClass附近的“expected unqualified-id”。

有人可以告诉我为什么第二个函数没有编译以及如何修复它?

提前致谢。

1 个答案:

答案 0 :(得分:2)

好像你需要一个模板模板:

template < template<typename T> class PointerClass, typename T>
PointerClass<T>* pointer_factory(void* ptr, T dummy_type) 

而不是

template <class PointerClass, typename T>
PointerClass<T>* pointer_factory(void* ptr, T dummy_type)

因为PointerClass本身就是一个模板。

这修复了编译错误,你必须测试它是否能达到你想要的效果,不过我会怀疑它。

编辑:

在这种情况下,似乎工厂类而不是模板可能更容易被其他人编写和理解。