C++ C++;:从字符串创建参数化指针
我有一个遗留接口,它以字符串的形式给我实例的类型,例如“int”、“float”等 我想出了两个函数来解决这个问题:C++ C++;:从字符串创建参数化指针,c++,templates,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("dou
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;
}
}
模板
T类型工厂(常数标准::字符串和类型id)
{
如果(!type_id.compare(“long”))
{
长余弦;
返回res;
}
如果(!type_id.compare(“double”))
{
双res;
返回res;
}
如果(!type_id.compare(“char”))
{
char res;
返回res;
}
}
及
模板
指针类*指针工厂(无效*ptr,T虚拟类型)
{
返回静态_-cast(ptr);
}
//指定用途:
//无效*原始ptr;
//计算器*p=指针工厂(原始ptr,类型工厂(“int”);
第二个函数没有编译,错误是PointerClass附近的“expected unqualified id”
有人能告诉我为什么第二个函数不能编译以及如何修复它吗
提前感谢。您似乎需要一个模板:
template < template<typename T> class PointerClass, typename T>
PointerClass<T>* pointer_factory(void* ptr, T dummy_type)
template
指针类*指针工厂(无效*ptr,T虚拟类型)
而不是
template <class PointerClass, typename T>
PointerClass<T>* pointer_factory(void* ptr, T dummy_type)
模板
指针类*指针工厂(无效*ptr,T虚拟类型)
因为PointerClass
本身就是一个模板
这修复了编译错误,您必须自己测试它是否符合您的要求,尽管我怀疑它会
编辑:
在这种情况下,工厂类似乎比模板更易于编写和理解。第一个函数不正确。没有类型
T
是long
、double
和char
的超类型。首先,不要使用compare
。改用==
@卢卡马蒂尼:你说得对。这是一个快速的攻击,但如果我必须指定类型,它是非常无用的。@KonradRudolph:你能告诉我为什么吗?@KonradRudolphcompare
不会创建一个临时的std::string
,所以我相信在这种情况下,最好避免操作符=
,谢谢大家,我在这里还没有完成,但我离我想要完成的目标有点近:)
template <class PointerClass, typename T>
PointerClass<T>* pointer_factory(void* ptr, T dummy_type)