Обнуляемые значения в C ++

Я создаю слой доступа к базе данных на нативном C ++ и ищу способы поддержки значений 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);

или что-то подобное. Как другие решают эту проблему?

Ответы на вопрос(4)

Ваш ответ на вопрос