format_dynamic_format
format_dynamic_format (동적 형식 문자열)
이 페이지는 C++26에서 도입된 std::dynamic_format 함수와 그 반환 타입인 dynamic-format-string 클래스 템플릿을 설명해요. std::dynamic_format은 실행 시간에 만들어지는 형식 문자열을 안전하게 사용할 수 있도록 도와주며, 반환된 객체는 std::basic_format_string으로 암시적으로 변환될 수 있어요. 이 기능을 활용하면 컴파일 타임에 고정되지 않은 형식 문자열로도 std::format 계열 함수를 사용할 수 있어요.
출처: cppreference
본문
함수 개요
/*dynamic-format-string*/ < char > dynamic_format ( std :: string_view fmt ) noexcept ; |
(1) | (since C++26) |
/*dynamic-format-string*/ < wchar_t > dynamic_format ( std :: wstring_view fmt ) noexcept ; |
(2) | (since C++26) |
사용자 지향 형식화 함수에서 직접 사용할 수 있는 동적 형식 문자열을 저장하는 객체를 반환해요. 이 객체는 std::basic_format_string으로 암시적으로 변환될 수 있어요.
매개변수
fmt |
- | 문자열 뷰 |
|---|
반환값
동적 형식 문자열을 보관하는 설명 전용 타입의 객체를 반환해요.
클래스 템플릿 dynamic-format-string<CharT>
template < class CharT > struct /*dynamic-format-string*/ ; |
(since C++26) (설명 전용*) |
|---|
데이터 멤버
| 멤버 | 설명 |
|---|---|
std :: basic_string_view < CharT > str |
형식 문자열을 보관해요 (설명 전용 멤버 객체*) |
생성자와 대입 연산자
/*dynamic-format-string*/ ( std :: basic_string_view < CharT > s ) noexcept ; |
(1) | (since C++26) |
|---|---|---|
/*dynamic-format-string*/ ( const /*dynamic-format-string*/ & ) = delete ; |
(2) | (since C++26) |
/*dynamic-format-string*/ & operator = ( const /*dynamic-format-string*/ & ) = delete ; |
(3) | (since C++26) |
이 타입은 복사도 이동도 할 수 없어요.
참고
std::dynamic_format의 반환 타입은 복사도 이동도 할 수 없어요. 따라서 아래와 같이 dynamic_fmt 객체를 glvalue로 전달하면 std::basic_format_string의 생성이 억제되어 프로그램이 ill-formed가 돼요. std::dynamic_format으로 std::basic_format_string을 생성하려면 std::dynamic_format의 반환값을 prvalue로 std::basic_format_string에 직접 전달해야 해요. 이때 복사 생략(copy elision)이 보장돼요.
auto dynamic_fmt = std::dynamic_format("{}");
auto s0 = std::format(dynamic_fmt, 1); // Error: use of deleted function
auto s1 = std::format(std::move(dynamic_fmt), 1); // still error
auto s2 = std::format(std::dynamic_format("{}"), 1); // OK
기능 테스트 매크로
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_format |
202311L | (C++26) | 런타임 형식 문자열 |
| 202603L | (C++26) | runtime_format을 dynamic_format으로 이름 변경 |
예제
#include <format>
#include <print>
#include <string>
#include <string_view>
int main()
{
std::print("Hello {}!\n", "world");
std::string fmt;
for (int i{}; i != 3; ++i)
{
fmt += "{} "; // constructs the formatting string
std::print("{} : ", fmt);
std::println(std::dynamic_format(fmt), "alpha", 'Z', 3.14, "unused");
}
}
출력:
Hello world!
{} : alpha
{} {} : alpha Z
{} {} {} : alpha Z 3.14
같이 보기
format (C++20) |
인자들의 형식화된 표현을 새 문자열에 저장해요 (함수 템플릿) [edit] |
|---|---|
vformat (C++20) |
타입 지워진 인자 표현을 사용하는 std::format의 비템플릿 변형이에요 (함수) [edit] |
basic_format_string format_string wformat_string (C++20) (C++20) (C++20) |
생성 시점에 컴파일 타임 형식 문자열 검사를 수행하는 클래스 템플릿이에요 (클래스 템플릿) [edit] |