>  기사  >  백엔드 개발  >  C 스타일 문자열이 C에서 템플릿 인수가 될 수 있나요?

C 스타일 문자열이 C에서 템플릿 인수가 될 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-10-30 03:07:29741검색

  Can C-Style Strings Be Template Arguments in C  ?

템플릿 인수로서의 C 스타일 문자열

C 프로그래밍 영역에서 딜레마에 직면했을 수 있습니다. 스타일 문자열을 템플릿 인수로 사용합니다. 이 문서에서는 문제와 잠재적 해결 방법을 자세히 설명합니다.

다음 코드 조각에서는 이러한 시도를 보여줍니다.

<code class="cpp">template <char *str>
struct X {
    const char *GetString() const {
        return str;
    }
};

int main() {
    X<"String"> x;
    cout << x.GetString();
}

그러나 클래스 정의에 컴파일 오류가 없음에도 불구하고 인스턴스화는 다음을 수행합니다. 오류 메시지. 문제는 컴파일러에서 지원하지 않는 템플릿 인수로 문자열 리터럴을 사용하려는 시도에 있습니다.

간단한 해결책은 문자열 리터럴을 문자 포인터로 바꾸는 것입니다.

<code class="cpp">char global_string[] = "String";

template <char const *str>
struct X {
    const char *GetString() const {
        return str;
    }
};

int main() {
    X<global_string> x;
    cout << x.GetString();
}</code>

이 코드는 성공적으로 컴파일 및 실행되므로 GetString 메서드를 사용하여 저장된 문자열을 검색할 수 있습니다.

C 11의 출현으로 이제 문자를 사용하여 문자열 리터럴을 템플릿 인수로 사용할 수 있습니다. 팩. 그러나 이전 C 버전을 지원하는 컴파일러의 경우 여기에 제시된 해결 방법은 여전히 ​​실행 가능한 옵션입니다.

위 내용은 C 스타일 문자열이 C에서 템플릿 인수가 될 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.