현재 개인용 표준 입력 판독기를 구현하려고합니다. 표준 입력에서 정수를 읽고 유효성을 검사하는 메소드를 만들었습니다. 아이디어는 표준 입력에서 문자열을 읽고, 여러 검사를하고, int로 변환하고, 마지막 검사를 수행하고, 읽은 값을 반환한다는 것입니다. 한편 오류가 발생하면 errorHint
을 채워 std::cerr
에 인쇄하고 std::numeric_limits<int>::min()
을 반환합니다.C++ std :: number 템플릿에 문자열
생각은 간단하고 구현하기 쉽습니다. 지금은 컨셉을 일반화하고 메소드 템플릿을 만들고 싶었습니다. 기본적으로 표준 입력에서 읽을 때마다 컴파일 타임에 선택할 수있었습니다. 정수 내가 원하는 (그것은 int
, long
, long long
, unsigned long
등등하지만 정수 일 수 있습니다).
template<
class T,
class = typename std::enable_if<std::is_integral<T>::value, T>::type
>
static T getIntegerTest(std::string& strErrorHint,
T nMinimumValue = std::numeric_limits<T>::min(),
T nMaximumValue = std::numeric_limits<T>::max());
아래 같은 .HPP 파일 몇 줄의 구현 :
template<
class T,
class>
T InputReader::getIntegerTest(std::string& strErrorHint,
T nMinimumValue,
T nMaximumValue)
{
std::string strInputString;
std::cin >> strInputString;
// Do several checks
T nReturnValue = std::stoi(strInputString); /// <--- HERE!!!
// Do other checks on the returnValue
return nReturnValue;
}
지금 문제가
, 나는 변환 할이를 위해 나는 다음과 같은 정적 템플릿 방법을 만들었습니다 방금 읽고 알았던 문자열이 정수 유형T
의 올바른 범위 내에 있습니다. 나는 이것을 어떻게 좋은 방법으로 할 수 있는가?
'bool success = std :: cin >> T_instance;', 다음 (다른) 범위 검사 ... – LogicStuff
단순히'std :: istringstream'을 사용하지 않는 이유는 무엇입니까? –