좋은 하루,C++ 템플릿이 문자열 유형 일 때 LOWcase 변환 만 수행
템플릿을 사용하여 간단한 C++ 링크 된 목록을 작성하고 있습니다. 나는 모든 것을 작동시키지 만, 템플릿이 string 형일 때 모든 문자를 소문자로 변환하여 대소 문자를 구분하지 않고 기능에 추가하려고했다.
그래서, 나는 어떤 단어를 처리하고 모든 소문자로 변환 다음 코드를 썼다 :
#define TEMPLATE string // changing this changes the template type in the rest of the program
Stack <TEMPLATE> s; //not used in this example, but just to show that I have an actual template for a class declared at some point, not just a definition called TEMPLATE
TEMPLATE word; // User inputs a word that is the same type of the Linked List Stack to compare if it is in the Stack.
cin >> word; // just showing that user defines word
for (unsigned int i = 0; i < word.length(); i++)
{
if (word.at(i) >= 'A' && word.at(i) <= 'Z')
word.at(i) += 'a' - 'A';
}
문제는 스택 내 스택의 템플릿과 이후 비교 단어가 될 때 string 타입이 아니라면 for 루프가 특별히 문자열을보기 위해 작성 되었기 때문에 분명히 오류 메시지를 던집니다.
그래서이 함수를 더 일반화하여 모든 유형을 전달할 수있는 방법이 있습니까? (나는 그렇게 생각하지 않는다. int를 검사하는 에러가 없기 때문에 문자열 만이 이것에 의존하는 문자열이다.)
아니면 위의 코드를 실행할 수있는 방법이 있는가? 내 스택 및 비교 변수에 대한 템플릿이 string 유형입니까?
필자는 파이썬이 어떻게 작동하는지에 익숙하지 않아서 C++로 구현하는 방법을 정확히 알지 못한다는 점을 제외하면 예외 처리를 살펴 보았습니다.
사이드 노트와 마찬가지로, 문자열을 모든 소문자로 변환하는 내장 함수를 사용하지 않으므로이 옵션도 옵션이 아니므로 해당 옵션을 추천하지 않습니다.
매크로는 아니다 ++. 내 말은,'template' 키워드조차도 ... 솔루션은 템플릿 전문 분야입니다. 그렇지만 매크로 hackery가 아닌 실제 C++ 템플릿을 사용해야합니다. – StoryTeller
이 스 니펫이 혼란 스럽거나 여전히 잘못하고 있는지 확실하지 않습니다. My Stack 클래스는 템플릿으로 설계되었습니다. 나도 쉽게 쓸 수 Stack Stack s; 그리고 문자열 단어를 사용했지만이 두 변수 유형이 함께 변경되도록하고 싶었습니다. 이것을 할 수있는 적절한 방법이 있다면 올바른 방향으로 나를 가르키면 좋을 것입니다. 나는 이것에 관해서 다른 곳에서는 아무 것도 보지 못했다. 그래서 나는 그것을하지 않았다. 감사. –
나는 혼란스러워하지 않는다. 이것은 클래스 템플릿에 관한 것이 아니라 함수 템플릿에 대한 해킹입니다. – StoryTeller