>백엔드 개발 >C++ >C 스타일 문자열을 C에서 템플릿 인수로 사용할 수 있습니까?

C 스타일 문자열을 C에서 템플릿 인수로 사용할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-30 17:54:31583검색

Can C-Style Strings Be Used as Template Arguments in C  ?

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

C 스타일 문자열을 사용하여 템플릿을 인스턴스화하려는 시도가 오류로 인해 실패합니다. 템플릿 인수로 문자열 리터럴을 잘못 사용하는 것에 대해 경고합니다.

C 스타일 문자열은 템플릿 인수로 직접 사용할 수 없지만 다음과 같은 대체 접근 방식이 있습니다.

포인터 사용 상수 문자열

한 가지 해결 방법은 상수 문자열에 대한 포인터를 템플릿 인수로 사용하는 것입니다.

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

char global_string[] = "String";

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

업데이트: C 11에서 템플릿 인수로 문자열 리터럴

C 11 이상에서는 문자 팩을 활용하여 문자열 리터럴을 템플릿 인수로 사용할 수 있습니다.

<code class="c++">template <char ...c>
struct X {
    const char (*GetString)() {
        return [](char*... s) { return s; }(c...);
    }
};

int main() {
    X<"S", "t", "r", "i", "n", "g"> x;
    cout << x.GetString();
}</code>

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

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