我有一个通用数据类型,它通过值传递,但不保留类型信息。我们只在这里存储指针和基本数据类型(如int,float等)。现在第一次,我们需要在这里存储std :: string。所以我们决定将它转换成std :: string *并存储它。然后是破坏问题。我们不喜欢每次都复制std :: string。所以我正在考虑这样的方法。说的数据类型看起来像这样C++通用数据类型
class Atom
{
public :
enum flags
{
IS_STRING,
IS_EMPTY,
HAS_GOT_COPIED,
MARKER
};
private:
void* m_value;
std::bitset<MARKER> m_flags;
public:
.....
Atom(Atom& atm)
{
atm.m_flags.set(HAS_GOT_COPIED);
.....
}
.....
~Atom()
{
if(m_flags.test(IS_STRING) && !m_flags.test(HAS_GOT_COPIED))
{
std::string* val = static_cast<std::string*>(m_value);
delete val;
}
}
};
这是一个很好的方法,以找出是否有没有更多提及的std :: string *?任何意见..
我看过boost :: any和poco :: DynamicAny。由于我需要序列化,我不能使用这些。
谢谢, Gokul。
你看过boost :: variant吗?序列化如何影响boost :: any的使用? (我从来没有尝试过poco :: DynamicAny) – 2010-03-31 19:42:59
为什么模板上的Atom对象会包含对象的类型? – 2010-03-31 19:43:09
@George:这不会是一种数据类型,并不符合目的。 – Gokul 2010-03-31 20:08:27