FANDOM


Czasami zachodzi konieczność utworzenia statycznej składowej nie będącej parametrem szablonu, a będącej zwykłą zmienną typu int, double, string czy cokolwiek innego. Wówczas deklaracja takiej zmiennej jest podobna do deklaracji składowej w zwykłej klasie(tj. nie parametryzowanej), definicję taką widać w kodzie poniżej:

#include <string>

template<typename T>
class St
{
	T t;
public:
	static std::string s;
	const T &get() { return t; }
	void set(T &val)
	{
		t = val;
	}
};

Kolejnym krokiem jest definicja statycznej składowej, możemy to zrobić w pliku nagłówkowym(w przypadku zwykłych klas musimy to zrobić w pliku cpp).

template<typename T>
std::string St<T>::s = "C++";

Przykładowy program:

#include <iostream>
#include <string>

template<typename T>
class Foo
{
	T t;
public:
	static std::string s;
	const T &get() { return t; }
	void set(T &val)
	{
		t = val;
	}
};

// Definicja zmiennej s

template<typename T>
std::string Foo<T>::s = "C++";

int main()
{
  using namespace std;
  Foo<int> a;
  cout<<a.get()<<" "<<a.s<<endl;
  return 0;
}

Jeśli chcemy, aby składowa statyczna była parametrem szablonu wówczas składnia jest podobna:

template<typename T>
class Foo
{
	T t;
public:
	static T s;
	const T &get() { return t; }
	void set(T &val)
	{
		t = val;
	}
};
template<typename T>
T Foo<T>::s;

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Więcej z Fandomu

Losowa wiki