>백엔드 개발 >C++ >C에서 문자열 리터럴을 비유형 템플릿 인수로 어떻게 사용할 수 있습니까?

C에서 문자열 리터럴을 비유형 템플릿 인수로 어떻게 사용할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-29 15:14:14891검색

How can I use string literals as non-type template arguments in C  ?

문자열 리터럴을 비유형 템플릿 인수로 전달

C 템플릿 영역에서 문자열 리터럴을 다음과 같이 허용하는 클래스 템플릿을 선언합니다. 유형이 아닌 템플릿 매개변수는 복잡한 작업이 될 수 있습니다. 많은 프로그래머는 템플릿 선언에서 my_class<"string">과 같은 문자열 리터럴을 직접 지정하는 기능을 원합니다.

이러한 요구를 해결하기 위해 C에서는 문자열 리터럴을 비유형으로 직접 전달하는 것을 허용하지 않습니다. 인수를 사용하는 경우 const 문자 배열을 활용하는 솔루션을 사용할 수 있습니다. 정적으로 연결된 const char[] 변수를 정의하고 이를 템플릿 매개 변수로 전달하면 문자열 리터럴을 사용하는 것과 비슷한 효과를 얻을 수 있습니다.

다음은 이 접근 방식을 보여주는 컴파일 가능한 코드 조각입니다.

#include <iostream>

template<const char *str>
struct cts {
    void p() {std::cout << str;}
};

static const char teststr[] = "Hello world!";
int main() {
    cts<teststr> o;
    o.p();
}

이 예에서는 teststr이라는 정적으로 연결된 const char[] 변수가 "Hello world!" 값으로 정의됩니다. teststr을 비유형 템플릿 매개변수로 cts 클래스 템플릿에 전달함으로써 문자열 리터럴을 사용하는 원하는 동작을 효과적으로 달성할 수 있습니다.

이 코드를 실행하면 다음과 같은 출력이 생성됩니다.

Hello world!

이 기술은 C에서 문자열 리터럴을 비유형 템플릿 인수로 전달하는 것에 대한 직접적인 지원 부족에 대한 해결 방법을 제공하여 프로그래머가 편리한 방식으로 문자열과 같은 값을 허용하는 클래스 템플릿을 정의할 수 있도록 합니다. 매너입니다.

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

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