【发布时间】:2010-03-31 19:24:39
【问题描述】:
我有一个通用数据类型,它是按值传递的,但不维护类型信息。我们只在其中存储指针和基本数据类型(如 int、float 等)。现在第一次,我们需要在其中存储 std::string 。所以我们决定把它转换成 std::string* 并存储起来。然后是破坏的问题。我们不喜欢每次都复制 std::string。所以我正在考虑这样的方法。假设数据类型是这样的
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* 的好方法吗?任何cmets..
我看过 boost::any 和 poco::DynamicAny。由于我需要序列化,所以我不能使用这些。
谢谢, 悟空。
【问题讨论】:
-
你看过 boost::variant 吗?序列化如何影响 boost::any 的使用? (我从未尝试过 poco::DynamicAny)
-
为什么不在 Atom 将包含的对象类型上模板化?
-
@George:这不是一种数据类型,也不能达到目的。
标签: c++