Using Variant to Store Point
?
??????Variant is a very powerful data type to store 'any' data. With the help of COM class _variant_t, VARIANT bacomes very easy to use. But _variant_t dosen't support all kinds of data type, for example, point data with two or three elements. Variant can hold pointer, but the memory management becomes a stubborn problem when copying variant. I'm trying to find a better way to solve the problem, but I don't want to rewrite a variant. So,? dose the way exist?
??????Many UI-libs use variant to hold data of properties, such as BCGPControlBar, and they do support point displaying. Actually the point elements are formated to a string so that they be stored into one property. But it's very boring to parse values between points and variant, so it's a good idea to write a adapter for them. This adapter takes charge to format point data to string, extract point data from string, and ex-convert with _variant_t.
if we have a point class like this:
?
class
?Point3D

{
public
:

Point3D()
{}
Point3D(
double
?x,?
double
?y,?
double
?z);
double
?x();
double
?y();
double
?z();
private
:
double
?x,?y,?z;
}
;
?
we can write our point adapter as following:
?
class
?PointAdapter

{
private
:
CString?m_strData;
public
:
PointAdapter();
PointAdapter(
const
?Point3D
&
?point);
PointAdapter(
const
?_variant_t
&
?point);

operator
?Point3D()
const
;
operator
?_variant_t()
const
;
}
;
?
now, we can use the classes:
?
Point3D?point(
1
,
2
,
3
);
_variant_t?var?
=
?PointAdapter(point);
Point3D?point2?
=
?PointAdapter(var);
?