【发布时间】:2012-04-27 08:03:12
【问题描述】:
我对@987654321@ 有疑问我想将包含的内容放在一个字符串中以输出它,我知道在编译时编译器不知道指针指向什么所以我想使用一种强制转换(将*(void*) 转换为字符串)static_cast:
std::string get_Info_Field (std::string nameTab,int IDF)
{ ostringstream os;
iter=Inst_Data.find(nameTab);
if(iter!= Inst_Data.end())
{ iterF=(iter->second).find(IDF);
if(iterF!=(iter->second).end())
{os<<*static_cast<std::string*>(iterF->second.value);}
else { os<<""; }
}
else { os<<"";}
return os.str();
};
这里iterF->second.value 是一个void*,我想得到它可以指向任何类型(int、string、float、long、char..)的值,我的问题是:这安全吗?无论类型如何,都会返回正确的指针值?我用int 测试过它可以工作,但我不确定其余的。
如有任何帮助,我们将不胜感激。
【问题讨论】:
-
可能有比使用 void* 更好的方法,是否可以将其转换为实际处理正确类型而不是使用不安全强制转换的模板函数?
-
感谢 Benj,模板肯定更安全,但在我的项目中,我有一个名为 Field 的泛型类和每种类型值的派生类(intField,stringField.. .),最好还是使用一个模板和一个类来处理所有事情。
标签: c++ casting void-pointers