2013-04-02 3 views
1

는 우리가 어떻게 같은 라인을 구현하기 위해 래퍼 어휘 캐스트 기능을 쓸 수 있습니다 :어휘 캐스트 C++

int value = lexical_cast<int> (string) 

내가 프로그래밍에 아주 새로운 오전과 우리가 함수를 작성하는 방법을 궁금 해서요. 템플릿을 찾는 방법을 모르겠습니다. 또한 double에 대한 래퍼 함수를 ​​작성할 수 있습니까? 예 :

double value = lexical_cast2<double> (string) 

??

답변

6

template <class Src> 
    lexical_cast(const Src &src) throw (const char*) { 
     std::stringstream s; 
     if (!(s << src) || !(s >> value) || s.rdbuf()->in_avail()) { 
      throw "value error"; 
     } 
    } 
+0

나는이 버전을 훨씬 선호한다! –

+0

스트림 오류는 어떻게됩니까? –

+1

@PeterWood 답변을 업데이트했습니다. – kay

1

이 같은 시도 할 수 :

#include <sstream> 

template <class Dest> 
class lexical_cast 
{ 
    Dest value; 
public: 
    template <class Src> 
    lexical_cast(const Src &src) { 
     std::stringstream s; 
     s << src; 
     s >> value; 
    } 

    operator const Dest &() const { 
     return value; 
    } 

    operator Dest &() { 
     return value; 
    } 
}; 

오류 검사 포함 : 당신이 당신의 예에 명시된 바와 같이 그것을 가지고

#include <sstream> 
#include <iostream> 

template <class T> 
void FromString (T & t, const std::string &s) 
{ 
    std::stringstream str; 
    str << s; 
    str >> t; 
} 

int main() 
{ 
    std::string myString("42.0"); 

    double value = 0.0; 

    FromString(value,myString); 

    std::cout << "The answer to all questions: " << value; 

    return 0; 
} 
+0

나는 double value = FromString (myString)을 의미한다고 생각한다. – john

+0

@ Markus Schumann - 템플릿이 무엇인지, 미안하지만 아직 조사하지 않았다. 나는 몇 개월 전에 프로그래밍을 시작했다. Rectangle이라는 클래스가 있습니다. – thestralFeather7

+0

@stardust_이 코멘트를 작성한 이후 코드가 변경되었습니다. – john

1

이없는 경우 excersice 및 목표가 문자열을 다른 유형으로 변환하는 것일 경우

C++ 11을 사용하는 경우 새로운 변환 기능이 있습니다. 당신이

int i = atoi(my_string.c_str()) 
double l = atof(my_string.c_str()); 
0

당신은 할 수 간단한 사용 this 헤더를 사용할 수 없습니다 C++ (11) 경우

그래서 당신은

std::stoi -> int 
std::stol -> long int 
std::stoul -> unsigned int 
std::stoll -> long long 
std::stoull -> unsigned long long 
std::stof -> float 
std::stod -> double 
std::stold -> long double 

http://www.cplusplus.com/reference/string/

처럼 뭔가를 할 수 있습니다. 그리고 to<std::string>(someInt) 또는 to<unsigned byte>(1024)과 같은 내용을 작성하십시오. 두 번째 부분은 던져 당신이 나쁜 일을하고 있다고 말할 것입니다.