c++ - Macro string concatenation -
i use macros concatenate strings, such as:
#define str1 "first" #define str2 "second" #define strcat(a, b) b which having strcat(str1 , str2 ) produces "firstsecond".
somewhere else have strings associated enums in way:
enum class myenum { value1, value2 } const char* myenumstring[] = { "value1string", "value2string" } now following not work:
strcat(str1, myenumstring[(int)myenum::value1]) i wondering whether possible build macro concatenate #defined string literal const char*? otherwise, guess i'll without macro, e.g. in way (but maybe have better way):
std::string s = std::string(str1) + myenumstring[(int)myenum::value1];
the macro works on string literals, i.e. sequence of characters enclosed in double quotes. reason macro works c++ standard treats adjacent string literals single string literal. in other words, there no difference compiler if write
"quick" "brown" "fox" or
"quickbrownfox" the concatenation performed @ compile time, before program starts running.
concatenation of const char* variables needs happen @ runtime, because character pointers (or other pointers, matter) not exist until runtime. why cannot concat macro. can use std::string concatenation, though - 1 of easiest solutions problem.
Comments
Post a Comment