[英]Get type from std::string, C++
在面试中有人问我一个问题。
因此,我有一个函数void f(std::string)
,并且将此函数称为f("int")
。 因此,我的函数必须在其主体中创建局部int x
。 有没有办法从const char*
获取类型。 我知道boost::mpl::vector
确实解决了这种问题。 谁能告诉我该技术?
如果应该支持用户定义的类型,则没有提供的显式映射是不可能的。 但是对于内置类型,它可以完成。 您可以实现用于类型定义的解析器,并将其与功能模板组合,以迭代方式构造类型。 像这样:
template <class T>
void parseType(std::string type)
{
std::string spec = extractOneSpecifierFrom(type);
if (spec == "[]") {
parseType<T[]>(type);
} else if (spec == "*") {
parseType<T*>(type);
} else if (spec == "const") {
parseType<const T>(type);
} // ... etc.
}
我对这个问题的印象是:
创建本地int是在编译阶段完成的。
f(std :: string s)的参数s是运行时数据。
因此,除非您在运行时检查字符串并选择带有int的块或预定义模板,例如
if ( s == "int" ){
// declare int
int i;
}
没有合理的方法可以做到这一点。
在我看来,在编译期间使用具有所有可能数据类型的目标代码似乎违背了问题的精神。
现在,对于具有适当反映的语言,解决方案几乎是微不足道的。 Object intObject = Class.forName(s).newInstance();
我最近也考虑过这一点。 我想出了一个基于每个字符串和if / else块在每个方法开始时强制转换的类成员。
void* data;
string cast; //set cast with some method, could also be enum.
//make methods and/or overloads with cast blocks
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.