그리고... 그게 된다면 컴파일 타임에 정규식 검증하고싶음...
그런데 literal string을 컴파일 타임에 넘기는거에서 막힘.
이 링크로부터, C++ 20의 경우 가능한 것 같음.
template <auto N>
struct string_litteral {
constexpr string_litteral(const char (&str)[N]) {
std::copy_n(str, N, value);
}
char value[N];
};
template <string_litteral>
void foo() {}
auto main() -> int { foo<"qwerty">(); }
이게 링크에 올라온 예제인데. 컴파일러 20버전 맞춰놓고 빌드하면 돌아감.
그런데 20 이전에는 트릭으로 어떻게 못함? 저거 하자고 20으로 올리는건 좀...
뭐 만드는데 이런거 까지 필요함.?? 버전 맘대로 올리지 못하는거 보니까 회사임??
대단한거 만드는것도 아니고 회사도 아니긴 함... 걍 20으로 올려도 되는데 아래 버전에서는 못하나 싶어서 물어본거임. 나 쓸 용도로 XML builder 만들고 있는데, 컴파일타임에 구조나 값이 잘못된걸 검사할 수 있으면 어떨까 해서 찾아보다가 여기까지 온거임 ㅋㅋㅋ...
static assert 쓰면 안됨?
+ 템플릿 인자 굳이 써야함?
아마 템플릿 파라메터를 const char*로 하고 문자열을 constepxr 로 별도 선언해서 쓰면 돌아는 갈텐데 원하는 것 처럼 안되는게 좀 있을꺼임 - dc App
그 방법도 보긴 했음... 그런데 그건 뭔가 TEXT() 이렇게 쓰는 느낌들어서 일단 보류했음.. 이거 말곤 없으려나
아마 없을껄? 나도 잠깐 찾아보니까 이거 구현이 컴파일러 레벨에서 추가된 것 같은데 - dc App
개인플젝이면 그냥 버전올려. 근데 목적이 대체 뭐임? 컴파일시점에 regex NFA까지 구성해서 검사까지 해주는 그런게 있나..? 왜 필요한건지도 모르겠음
목적은 딱히 없는데. 다른 댓글에 말한대로 걍 궁금해서 찾아보다 온거임
지금외서 생각해보니... 컴파일타임 검사가 의미있을까 싶다. ㄱㅅ
걍 20 올리기로 함. 근데 이젠 인텔리센스가 말썽이네;
인텔리센스 걍 씹고 쨔셈 난 그렇게 했다
cmake 결과에 의존하기로 했다. 근데 빨간줄 겁나 거슬리네. 꺼버리는게 맘편하려나
아 근데 위에 답변 안했었네. 템플릿 인자는 굳이긴 함 ㅋㅋ static_assert는 어떤 맥락에서 나온건지 이해를 못했음... ㅈㅅ
컴파일타임에 구조나 값이 잘못된걸 검사할 수 있으면 어떨까 한다며
아.. literal string을 넘기는 부분에서 static_assert 얘기를 한 줄 알았음. static_assert로 저게 해결된다는건줄
컴파일타임에 뭘 하겠다고 고민하는거 난 의문인게 걍 Makefile같은데 그걸하는 프로그램(런타임으로 동작) 넣어놓고 만족하면 계속 컴파일하면 되는거 아닌가 왜 굳이 어렵게 돌아가려고 하는걸까 하는 생각이 듦