Я создаю уровень доступа к базе данных на родном С++, и я ищу способы поддержки значений NULL. Вот что я до сих пор:
class CNullValue
{
public:
static CNullValue Null()
{
static CNullValue nv;
return nv;
}
};
template<class T>
class CNullableT
{
public:
CNullableT(CNullValue &v) : m_Value(T()), m_IsNull(true)
{
}
CNullableT(T value) : m_Value(value), m_IsNull(false)
{
}
bool IsNull()
{
return m_IsNull;
}
T GetValue()
{
return m_Value;
}
private:
T m_Value;
bool m_IsNull;
};
Вот как мне придется определять функции:
void StoredProc(int i, CNullableT<int> j)
{
...connect to database
...if j.IsNull pass null to database etc
}
И я называю это следующим образом:
sp.StoredProc(1, 2);
или
sp.StoredProc(3, CNullValue::Null());
Мне просто интересно, есть ли лучший способ, чем это. В частности, мне не нравится одноэлементный объект CNullValue со статикой. Я бы предпочел просто сделать
sp.StoredProc(3, CNullValue);
или что-то подобное. Как другие решают эту проблему?