Re: concatenate variable number of arguments and types to a char *
On Aug 19, 5:04 am, suresh <suresh.amritap...@gmail.com> wrote:
Hi
How to write a function which would concatenate variable number of argume=
nts >of different type and return a char *. For example I need the function
The problem with this design is.. What does the char* point to?
Returning a char* to a string created inside a function is a bit
dangerous as the string will be out of scope when the function
returns.
Unless you are playing with dynamic allocation of char arrays.
You are safer to return a std::string object by value and then you can
easily use this as a char pointer by calling the c_str() member
function.
f("his weight is = ", 51.5, "pounds");
to return the string "his weight is = 51.5 pounds".
As an improvment over what Alf posted(i think):
#include <string>
#include <sstream>
#include<iostream>
class str_add{
public:
template<typename T>
str_add& operator <<(T t){ss<<t; return *this;}
std::string str(){return ss.str();}
private:
std::stringstream ss;
};
int main() {
std::string str = (str_add()<< "lets add..." << 5.6179 << " or
something.").str();
const char* cp1 = str.c_str();
//cp1 is ok, it points to a valid string.
const char* cp2 = (str_add()<< "lets add..." << 5.6179 << " or
something.").str().c_str();
//cp2 is not ok, it pointed to a temporary
}
Note you can make the operator anything you like( i.e + or += )
instead of <<.
If you send it into a function as a char* you can only use it in the
function, whereas if you send it in as a std::string it can be
returned and used both inside and outside the function, and is much
safer.
so you make a function that accepts a std::string argument and pass
it:
(str_add()<< "lets add..." << 5.6179 << " or something.").str()
Obviously with your own words and numbers.
And you can also return that string from the function if you want.