In C# and Java, it's possible to create constant strings using one or more other constant strings. I'm trying to achieve the same result in C++ (actually, in C++0x, to be specific), but have no idea what syntax I would use to achieve it, if such a thing is possible in C++. Here's an example illustrating what I want to do:
#include <stdio.h>
const char array1[] = "Hello ";
const char array2[] = "world!\n";
const char array3[] = array1 + array2; // C++ doesn't like it when I try this
int main() {
printf(array3);
return 0;
}
Any pointers? (No pun intended.)
EDIT: I need to be able to apply this to integer arrays as well - not just char arrays. However, in both cases, the to-be-combined arrays will be fixed-size and be compile-time constants.
So...
You don't want to do run time concatenation.
You don't want to use the preprocessor.
You want to work with constants and output constants.
OK. But you're not going to like it:
#include <boost/mpl/string.hpp>
#include <iostream>
int main()
{
using namespace boost::mpl;
typedef string<'Hell', 'o '> hello;
typedef string<'Worl', 'd!'> world;
typedef insert_range<hello, end<hello>::type, world>::type hello_world;
std::cout << c_str<hello_world>::value << std::endl;
std::cin.get();
}
Use a string object:
#include <iostream>
#include <string>
const std::string s1 = "Hello ";
const std::string s2 = "world!\n";
const std::string s3 = s1 + s2;
int main()
{
std::cout << s3 << std::endl;
}
In C++0x you can do the following:
template<class Container>
Container add(Container const & v1, Container const & v2){
Container retval;
std::copy(v1.begin(),v1.end(),std::back_inserter(retval));
std::copy(v2.begin(),v2.end(),std::back_inserter(retval));
return retval;
}
const std::vector<int> v1 = {1,2,3};
const std::vector<int> v2 = {4,5,6};
const std::vector<int> v3 = add(v1,v2);
I don't think there's any way to do this for STL containers in C++98 (the addition part for v3
you can do, but you can't use the initializer lists for v1
and v2
in C++98), and I don't think there's any way to do this for raw arrays in C++0x or C++98.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With