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_formatdynamic_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]

더 알아보기 (Learn more)

cppreference