Re: return value
On Wed, 16 Apr 2008 17:43:45 -0700, Carmen Sei <fatwallet951@yahoo.com>
wrote:
Is there any way to return either NULL or a SYSTEMTIME object? will
it work in C++?
as in Java, one can return either NULL or an object, does C++ has
something similar?
In Java, you're returning a reference to an object or NULL. The
corresponding thing in C++ would be to return a pointer or NULL.
Is the following code OK for C++?
=================
SYSTEMTIME Table::Get(char* FieldName)
{
_variant_t vtValue;
vtValue = m_Rec->Fields->GetItem(FieldName)->GetValue();
if (vtValue.vt == VT_NULL) {
return NULL;
}
SYSTEMTIME m_st;
The "m_" prefix signifies "member variable" and shouldn't be used to name
local variables.
VariantTimeToSystemTimeWithMilliseconds (vtValue.date, &m_st);
return m_st;
}
No, SYSTEMTIME is a struct, not a pointer, and to return a SYSTEMTIME is to
return the entire struct by value. As C++ is not garbage-collected, you
really can't return a pointer here. (You could make m_st static and return
a pointer, but then you're no longer thread-safe, and each call to Get
destroys the previous result. You could instead create it dynamically, but
then the caller would have to assume ownership and delete the object.
Neither are recommended.) What you can do is change the function as
follows:
bool Table::Get(char* FieldName, SYSTEMTIME& st)
{
_variant_t vtValue;
vtValue = m_Rec->Fields->GetItem(FieldName)->GetValue();
if (vtValue.vt == VT_NULL) {
return false;
}
VariantTimeToSystemTimeWithMilliseconds (vtValue.date, &st);
return true;
}
--
Doug Harrison
Visual C++ MVP