Klasa szablonowa bez podawania klasy (NULL)

0

Temat może trochę dziwnie brzmi, ale nie wiedziałem jak go krótko opisać.
Mam taki problem:
Mam klasę szablonową typu:

template<class T>
class Klasa
	{
	public:
		void fun(T* ptr)
			{
			m_ptr;
			}

	private:
		T* m_ptr;
	};

Moje pytanie brzmi: czy da się jakoś zrobić, by można było jako T podać NULL? np.

Klasa<NULL> MyClass;

alboKlasa MyClass; //domyślny NULL

W końcu nie każdy wskaźnik musi na coś pokazywać a nie chcę robić sztucznego obiektu, który by to "symulował" ;-)
1

Weź ręcznie podstaw zamiast T - NULL i sam powiedz czy ma to jakikolwiek sens.

0
_13th_Dragon napisał(a):

Weź ręcznie podstaw zamiast T - NULL i sam powiedz czy ma to jakikolwiek sens.

O_o Tak, masz rację. Nie ma ;/

1

Możesz zrobić specjalizację dla defaultowego typu i używać Klasa<>.

2

Da się:

struct Empty {};

Klasa<Empty> MyClass;

Jeśli mają być wywoływane jakieś metody tej struktury / klasy to trzeba zaimplementować zaślepki.

Jak chcesz konkretnie sprawdzać obecność tej zaślepki bez implementacji w niej

bool IsNull() 

to:

template< typename ValueT >
struct IsEmpty {
  static const bool value = false;
}

template< >
struct IsEmpty<Empty> {
  static const bool value = true;
}

// i w kodzie:

if (IsEmpty<T>::value) {
...
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1