값으로 전달되지만 형식 정보를 유지 관리하지 않는 범용 데이터 형식이 있습니다. 우리는이 안에 포인터와 기본 데이터 유형 (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;
}
}
};
과 같은 말? 모든 의견 ..
나는 boost :: any와 poco :: DynamicAny를 보았다. 직렬화가 필요하기 때문에 사용할 수 없습니다.
고마워, 고쿨.
당신은 boost :: variant를 보았습니까? 직렬화가 boost :: any의 사용에 어떤 영향을 미칩니 까? (나는 결코 poco : : DynamicAny를 시도한 적이 없다) –
템플릿에 포함 할 객체 유형에 Atom 템플릿을 사용하는 이유는 무엇입니까? –
@ George : 그것은 하나의 데이터 유형이 아니며 목적을 달성하지 못합니다. – Gokul