c++ Nullable implementation

Posted on 2009-07-08
Last Modified: 2012-06-27
Do you know a good c++ implementation of the Nullable Generic in c#?
Something like Nullable<class T>

Is there a good way to avoid using the .Value member to get the value?
Nullable<float> Number;

float x=Number.Value; //Can I avoid the '.Value' here somehow? and use x=Number? without custom casting staff?

Open in new window

Question by:Hanochr
LVL 40

Accepted Solution

evilrix earned 250 total points
ID: 24802668
Not being a C# expert and going just by the docs I think something like below (with a few tweaks maybe) will model the behavior you are after.

>> Is there a good way to avoid using the .Value member to get the value?
I've overloaded operator *()

template < typename T>

class Nullable



   Nullable(T * p = 0)





   bool HadValue() const


      return p_ != 0;



   T const & Value() const


      return *p_;



   T & Value()


      return *p_;



   T const & operator * () const


      return *p_;



   T & operator * ()


      return *p_;



   T * p_;





int main()


   bool b = true;


   Nullable<bool> bnYes(&b);

   Nullable<bool> bnNo;


Open in new window

LVL 53

Assisted Solution

Infinity08 earned 250 total points
ID: 24802720
I see evilrix already posted his suggestion. Mine's slightly different, so I'll post it too (it's a rough example, just to give an idea).

>> Is there a good way to avoid using the .Value member to get the value?

An overloaded cast operator like below should do the trick.
#include <iostream>

template <class T>

class Nullable {

  private :

    T data;

    bool null;

  public :

    Nullable(T d) : data(d), null(false) { }

    Nullable() : data(), null(true) { }

    bool hasValue() { return !null; }

    T value() { return data; }


    operator T() { return data; }


int main(void) {

  Nullable<float> numberA = Nullable<float>(5.0);

  Nullable<float> numberB = Nullable<float>();


  (numberA.hasValue()) ? (std::cout << numberA.value()) : (std::cout << "NULL"); std::cout << std::endl;

  (numberB.hasValue()) ? (std::cout << numberB.value()) : (std::cout << "NULL"); std::cout << std::endl;


  float value = numberA;

  std::cout << value << std::endl;


  return 0;


Open in new window


Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
COnsume rest client 6 34
How to learn Linux? 10 41
Syntax error 9 45
DateTimepicker 4 33
We all know that functional code is the leg that any good program stands on when it comes right down to it, however, if your program lacks a good user interface your product may not have the appeal needed to keep your customers happy. This issue can…
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
The goal of this video is to provide viewers with basic examples to understand and use pointers in the C programming language.
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use while-loops in the C programming language.

929 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now