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 중국어 웹사이트의 기타 관련 기사를 참조하세요!