I have made a few functions to write and read class to binary file.

The 1st `writeElement` function i want to just be called if the argument is a class.

Then i want to have the other functions for `int, double, size_t` in one function.
There has to be a better way to do this, i shouldn't have to create a new function for all different types.

```
template <class T>
inline void writeElement(ostream& out, T target) { target.write(out); }
inline void writeElement(ostream& out, int target) { out.write((char*)&target, sizeof(int)); }
inline void writeElement(ostream& out, double target) { out.write((char*)&target, sizeof(double)); }
inline void writeElement(ostream& out, size_t target) { out.write((char*)&target, sizeof(size_t)); }
inline void writeElement(ostream& out, const string str)
{
    size_t size = str.size();
    writeElement(out, size);
    out.write(&str[0], size);
}
template <class T>
inline void writeElement(ostream& out, vector<T> vector)
{
    size_t size = vector.size();
    writeElement(out, size);

    for (auto &element : vector)
    {
        writeElement(out, element);
    }
}

class Header
{
public:
    string sig;
    double  version;

public:
    void read(istream& in)
    {
        readElement(in, sig);
        readElement(in, version);
    }

    void write(ostream& out)
    {
        writeElement(out, sig);
        writeElement(out, version);
    }
};

```