2014-10-25 7 views
0

오늘 재미있게 취미 코드를 썼습니다. 몇 가지 일을하는 동안 흥미롭고 멋진/멋진/멋져 보이는 방식으로하고 싶은 재미있는 것을 발견했습니다.문자열 형식 (또는 부스트)에 스마트 형식 기능이 있습니까?

아이디어는 기본적으로 C++에서 문자열을 갖고 stringstream (ss를 생성하기 위해)에 전달한다는 아이디어입니다.

bool ExecuteSendPrivateMessage(int sender, std::string params) 
{ 
    std::stringstream sparams(params); 
    int_or_string receiverid; 
    std::string message; 

    sparams >> receiverid >> message; 

    if (sparams.fail()) 
    { 
     std::cout << "usage: /send_message_to <userid/username> <message>" << std::endl; 
     return true; 
    } 
    if (int_or_string.HasString()) 
    { 
     receiverid = GetUseridFromUsername(int_or_string.GetString()); 
    } 
    SendMessage(receiverid.GetInt(), message); 
    return true; 
} 

이 C++에서 가능한 : 같은 사용자 입력에 따라

그런 다음, 예상되는 형식은 <int or string> <string>, 그리고 올바른 출력을 얻을 것인가? 또는 Boost와 함께 C++로?

숫자만으로 된 이름을 가진 사용자가 없다고 가정하십시오.

+0

_'smart format'_ 기능이란 정확히 무엇을 의미합니까? –

+0

'연산자 >>를 사용하여 가능한 변수 집합과 구별하고 올바른 값을 올바른 변수에 할당합니까? 예를 들어 :) – Gizmo

+0

당신은 내가 [이 질문에 지적했다 뭔가있을 수 있습니다 (http://stackoverflow.com/questions/24504582/test-whether-stringstream-operator-has-parsed-a-) 불량 유형? noredirect = 1 # comment37965807_24504582). –

답변

2

일종의 해킹 방법이지만, 나는 receiverid를 stringstream에 넣은 다음 stringstream에서 int로 읽으려고합니다. sstream의 fail 플래그가 설정되어있는 경우 문자열이 있어야하므로 초기 수신자 ID를 사용합니다. 이 같은

뭔가 :

std::string recieverid; 
std::stringstream srecieverid(recieverid); 
int irecieverid; 
srecieverid >> irecieverid; 
if(srecieverid.fail()) { 
    irecieverid = GetUseridFromUsername(recieverid); 
} 
SendMessage(irecieverid, message); 

정말 깨끗한 방법은 아니지만, 그것은 작동합니다.

+0

var 이름은 유감스럽게 생각합니다. – Alexandru