문자열을 서식 지정하는 데 사용할 수있는 문자열 및 벡터 벡터를 허용하는 도우미 함수가 있는데 바로 지금 내 솔루션은 수동으로 색상 벡터의 크기를 확인하고 같은 양의 색상으로 콘솔 인쇄를 호출하는 것입니다. . ,Libtcod를 사용하여, 어떻게 콘솔에서 -> 동적 인 색상의 문자열을 출력합니까?
void helper_func(TCODConsole* con, std::string msg_str, std::vector<TCOD_colctrl_t> color_vector)
{
char* message = msg_str.c_str();
//this is repeated 1 through 16, adding another color_vector.at(n) for each.
...
else if (color_vector.size() == 2)
//message might be "%cHello%c was in red"
console->print(x, y, message, color_vector.at(0), color_vector.at(1))
...
else if (color_vector.size() == 4)
//message might be "%cThe octopus%c shimmers at %cnight%c"
console->print(x, y, message, color_vector.at(0), color_vector.at(1), color_vector.at(2), color_vector.at(3))
...
}
이 작동하지만, 그것은 끔찍한 내가 그것을 당기의 다른 방법으로보고 있었다 :
코드에서 같은 일을 할 거라고, 나는 4 색 벡터를 가지고 말 16 색 이상을 허용합니다.
벡터의 각 색상에 대해 sprintf
을 시도하고 out_string에 추가 한 다음 반복합니다. 나는 ostringstream과 같은 일을 시도했습니다. "%c"
에 msg_str을 분할 한 다음 각각에 색상을 추가하면 결과 문자열에 합류하려고했습니다. 처음 색을 사용한 다음 그 색 대신 무작위 문자를 사용하여 항상 효과적이었습니다.
단순히 sprintf(out_char, format_msg, TCOD_COLCTRL_1)
이 (console->print(out_char)
을 사용하여) 콘솔에 인쇄하기 때문에 위의 작업이 효과가 있기를 기대했습니다.
내 질문은 : 콘솔 -> 인쇄 기능에 다양한 수의 색상을 전달하고 코드 중복을 심각하게하지 않고 색상을 정확하게 표시하는 좋은 방법이 있습니까?
대체로서, 나는 그것의 크기를 계산, 최초의 컬러까지 문자열의 섹션을 인쇄 할 수있는 그만큼 이상 x
를 이동하고 다음 섹션을 인쇄,하지만 그 이상이 아니다.
나는이 질문이 일반 문자 printf
에 대해 같은 것을 묻는 것으로 일반화 될 수 있다고 생각한다.
나는 찾고있는 제목이 "벡터를 사용하여 가변 인자 함수를 호출하는 방법"과 유사하다고 생각합니다. – user2864740
예 : ref http://stackoverflow.com/questions/21330153/c-vector-wrapper-around-variadic-function, http://stackoverflow.com/questions/17974209/c11-calling-a-variadic-function-with-the -elements-of-a-vector, http://stackoverflow.com/questions/9276902/passing-stdvectorint-items-to-variadic-function – user2864740
감사합니다. 그 개념과 일치하는 몇 가지 다른 질문이있는 것 같습니다. 내가 한번 볼게. – TankorSmash