좋아, 우선이 지금까지 작동하지만 매우 버그입니다. ints
, floats
, doubles
, strings
및 char*s
을 사용할 수 있기를 원합니다. 그것은 일종의 char *로 모든 것을 시도하여 일종의지만, 만약 내가 실패하고 싶습니다 그것은 다른 유형으로 그것을 다시 시도 싶습니다. 나는 또한 params의 수를 전달할 필요가 없으면 좋겠다.다양 한 유형의 variadic 함수, threaded cout에 전달
- 그들이 충돌 또는 스레드가 다시 참가로 메인 프로그램을 걸려하지 않고 콘솔에 스레드의 출력을 가지고 : 이제
- 사용 :
logHelperMessage(logLevel,firstpram,...)
(첫 번째 매개 변수를 사용하여 mem 위치를 얻은 다음 거기에서 이동 하시겠습니까?) - :
ss << va_arg(messages,char*);
에서 작동하지 않으면char*
가능성이 있습니까?
#include <iostream>
#include <cstdlib>
#include <sstream>
#include <iostream>
#include <windows.h>
#include <ctime>
#include <tchar.h>
#include <stdio.h>
#include <vector>
#include <thread>
const enum loglevel{INFO,WARNING,OK,SEVERE};
void logHelperMessage(loglevel,int, ...);
void threadedloghelpermessage(loglevel,string);
int main(int argc, char **argv)
{
logHelperMessage(INFO,4,"Hi","I","DO","WORK");
}
void logHelperMessage(loglevel severity,int number, ...)
{
va_list messages;
va_start(messages,number);
std::stringstream ss;
for(int i = 0;i < number;i++)
{
ss << va_arg(messages,char*);
}
std::string s = ss.str();
thread t1(threadedloghelpermessage,severity,s);
t1.join();
}
void threadedloghelpermessage(loglevel severity,string message)
{
//TODO: implement a stack?
switch (severity)
{
case INFO:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE);
cout << "[IF]";
break;
case WARNING:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x06);
cout << "[WA]";
break;
case OK:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);
cout << "[OK]";
break;
case SEVERE:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);
cout << "[ER]";
break;
default:
break;
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x08);
time_t t = time(0);
struct tm now;
localtime_s(&now, &t);
cout << "[";
int hour = now.tm_hour;
if(hour < 10)
{
cout << 0 << hour << ":";
}
else
{
cout << hour << ":";
}
int minu = now.tm_min;
if(minu < 10)
{
cout << 0 << minu << ":";
}
else
{
cout << minu << ":";
}
int sec = now.tm_sec;
if(sec < 10)
{
cout << 0 << sec;
}
else
{
cout << sec;
}
cout << "] ";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0x07);
cout << message << endl;
}
(아래에서 그 이상)에 어쨌든이 (스레드를?)
고급 고급 변수 함수를 둘러 보았지만 모두 인수 수가 많은 부분이 필요합니다. 하나의 유형 만 허용합니다. 또한 연속 루프가 필요한 경우 프로그램의 다른 곳에서 루프를 설정했습니다. (나는 그게 전부라고 생각합니다)
하나의 유형의 유모차 만 입력 할 수 있습니까? IE : 모든 문자열 또는 모든 int. –
@StevenVenham : 모든 인수가 같은 유형인지 확인해야합니까? –
아니요, 유형 T 이후로 인수를 취하고 거기에서 사용하는 방법은 무엇입니까? 예를 들어, 내가 통과 한 경우 : "안녕하세요", 1,3.4, '오'라는 말은 여러 다른 유형의 주장을 이해할 수 있습니까? –