0

Alright guys I have a question. I am trying to write a custom data type. Let me explain a little further. I'll start out at the base.

te_char (you don't really have to worry about this.

>char c_char
>rgb color

te_word (weird part)

>int type (based on an enumeration
>vector <te_char> whatever
>what ever else

>inline void conv_type_to_word

te_body : public ostream (I want it to work this way atleast)

>vector <te_word> whatver

I want to be able to write to the te_body's vector like you would a cout.

Like

te_body awesomesauce;
awesomesauce << "SMILEY EXTREME =" << 7;

OR

I'd like to be able to dynamically write to a te_word with any data type. At that I can handle converting to it. I just want to litteraly make a functuion with a dynamic amount of arguments or make an operator that is like the "cout <<" that writes to the vector of te_words. I can determine the type of input within that function or operator.

I tried this to no avail:

#include <cstdlib>
#include <iostream>

using namespace std;
class lol: public ostream
{    
};
int main(int argc, char *argv[])
{
    lol b;
    b<< "HI" << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

It had no errors but crashed upon running.

2
Contributors
4
Replies
5
Views
7 Years
Discussion Span
Last Post by Radical Edward
0

If all you want is the syntax of ostream inserters, it is easy to duplicate without dealing with the iostreams framework. Here is an example taking strings.

#include <iostream>
#include <string>
#include <vector>

using namespace std;

class VectorStream {
public:
    string& operator[](int i) { return v[i]; }

    friend VectorStream& operator<<(VectorStream& strm, string const& s)
    {
        strm.v.push_back(s);
        return strm;
    }
private:
    vector<string> v;
};

int main()
{
    VectorStream strm;

    strm << "a" << "test" << "baby";

    for (int i = 0; i < 3; ++i)
        cout << strm[i] << '\n';
}

Edited by Radical Edward: n/a

0

Okay I just looked at that, I don't have a compiler right now but could I go like:

strm << "hi" << 27373;

? Or would it be like the Iostreams own ostream function where they declare it for each data type??

EDIT:

Okay I see how it works, the v vector would be my te_word vector, and I would have to make a operator friend function for every different type such as int, double, etc.

Edited by argio: n/a

0

I FIGURED IT OUT. Here is an example of it working. :)

#include <iostream>
#include <string>
#include <vector>
#include <stdlib.h>	// for itoa() call
#include <stdio.h>	// for printf() call

char buf[10000];

using namespace std;



class te_body {
public:
    string& operator[](int i) { return v[i]; }

    friend te_body& operator<<(te_body& strm, string const& s)
    {
        strm.v.push_back(s);
        return strm;
    }
    
    friend te_body& operator<< (te_body& strm, int const& i)
    {
        strm.v.push_back(itoa(i, buf, 10));
        return strm;
    }
    
    unsigned int size()
    {
         return v.size();
    }
private:
    vector<string> v;
};

int main()
{
    int b;
    b = 348347834;
    te_body strm;

    strm << "a" << "test" << "baby" << b;

    for (int i = 0; i < strm.size() ; ++i)
        cout << strm[i] << '\n';
        
        system("PAUSE");
}

Edited by argio: n/a

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.