Tym razem troche inna zabawa, "mój kawałek kodu". Zabawa polega na wklejeniu kawałka kodu nad którym teraz pracujecie, tudzież piszecie w wolnej chwili. Można oczywiście zadawać pytania odnośnie kodu, komentarze (krótki komentarz co kod ma robi jest mile widziany). Jako że jestem inicjatorem, zaczynam:
Poniższy kod wykorzystuje tzw. class policies (Alexandrescu, Modern C++ Design, 2005) do "konfigurowania" klas. Mająć klasę bazową, poprzez szablony możemy konfigurować jej implementacje (przypomina to wzorzec strategii).
Kod:
#include<list>
#include<vector>
template<typename T>
class IDataHolder
{
public:
virtual void push(const T& value) = 0;
virtual T pop() = 0;
};
template<typename T = void>
class DataList : public IDataHolder<T>
{
std::list<T> m_data;
public:
virtual void push(const T& value) { m_data.push_back(value); }
virtual T pop() { T t = m_data.front(); return t; }
};
template<typename T = void>
class DataVector : public IDataHolder<T>
{
std::vector<T> m_data;
public:
virtual void push(const T& value) { m_data.push_back(value); }
virtual T pop() { return m_data.front(); }
};
template<typename T, typename C = IDataHolder<T>>
class CharQueue
{
C m_data;
public:
void push(const T& value) { m_data.push(value); }
T pop() { return m_data.pop(); }
};
int main()
{
CharQueue<int, DataList<int>> x1;
x1.push(10);
int x = x1.pop();
CharQueue<float, DataVector<float>> x2;
x2.push(10.f);
float f = x2.pop();
return 0;
}
Zakładki