다음과 같은 작업을 수행하고 싶습니다.
#define FOO(bar, ...) \
static_assert(bar == "foo" || bar == "bazz", "Invalid value for bar") \
...
즉, 컴파일 타임에 매크로에 주어진 값이 허용 된 값 중 하나인지 확인하고 싶습니다. 가변 길이의 문자열과 비교할 때 컴파일 시간 문자열 비교를 수행하는 가장 깨끗한 방법은 무엇입니까?
문자열보기를 사용할 수 있습니다.
#include <string_view>
using namespace std::string_view_literals;
// Note the sv after the string
#define FOO(bar, ...) \
static_assert(bar == "foo"sv || bar == "bazz"sv, "Invalid value for bar") \
...
표현식 "foo"sv
은 리터럴 연산자를 호출합니다. 그것은을 구성 std::string_view
에서 "foo"
. 문자열과 비교하기 위해 std::string_view
오버로드 된 ==
연산자가 있습니다. 이러한 오버로드 된 연산자는 constexpr
컴파일 타임에 평가할 수 있음을 의미합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다