«template-meta-programming» 태그된 질문

27
클래스 멤버 함수가 있는지 템플릿으로 검사 했습니까?
특정 멤버 함수가 클래스에 정의되어 있는지 여부에 따라 동작을 변경하는 템플릿을 작성할 수 있습니까? 다음은 내가 쓰고 싶은 간단한 예입니다. template<class T> std::string optionalToString(T* obj) { if (FUNCTION_EXISTS(T->toString)) return obj->toString(); else return "toString not defined"; } 경우에 따라서, class T한 toString()정의하고 그것을 사용; 그렇지 않으면 그렇지 않습니다. 내가 모르는 마법의 …

20
std :: tuple의 요소를 어떻게 반복 할 수 있습니까?
튜플 (C ++ 11 사용)을 어떻게 반복 할 수 있습니까? 다음을 시도했습니다. for(int i=0; i<std::tuple_size<T...>::value; ++i) std::get<i>(my_tuple).do_sth(); 그러나 이것은 작동하지 않습니다. 오류 1 : 죄송합니다. 구현되지 않았습니다. 'Listener ...'를 고정 길이 인수 목록으로 확장 할 수 없습니다. 오류 2 : 상수 표현식에 나타날 수 없습니다. 그렇다면 튜플의 요소를 올바르게 반복하는 …


1
더 많은 정신 광기-파서 유형 (규칙 대 int_parser <>) 및 메타 프로그래밍 기술
질문은 맨 아래에 굵게 표시되어 있으며 문제는 끝 부분의 증류 코드 조각으로 요약됩니다. 내 유형 시스템 (유형 시스템이 유형에서 문자열로, 유형에서 문자열로 수행)을 단일 구성 요소 (Lakos에서 정의한대로)로 통합하려고합니다. 내가 사용하고 boost::array, boost::variant하고, boost::mpl이를 달성하기 위해. 내 유형에 대한 파서 및 생성기 규칙을 변형으로 통합하고 싶습니다. 정의되지 않은 유형, int4 …

3
컴파일 타임에 다차원 std :: vector의 깊이를 얻으려면 어떻게해야합니까?
다차원을 취하고 std::vector깊이 (또는 차원 수)를 템플릿 매개 변수로 전달 해야하는 함수가 있습니다. 이 값을 하드 코딩하는 대신 깊이를 값 으로 반환 하는 constexpr함수 를 작성하고 싶습니다 .std::vectorunsigned integer 예를 들면 다음과 같습니다. std::vector&lt;std::vector&lt;std::vector&lt;int&gt;&gt;&gt; v = { { { 0, 1}, { 2, 3 } }, { { 4, 5}, …

4
템플릿 메타 프로그래밍
누군가 첫 번째 템플릿 메타 프로그래밍 방식이 무한 루프가되는 이유를 설명해 줄 수 있지만 두 번째 템플릿은 올바르게 실행됩니다. #include &lt;iostream&gt; using namespace std; template&lt;int N, int M&gt; struct commondivs { static const int val = (N&lt;M) ? commondivs&lt;N,(M-N)&gt;::val : commondivs&lt;(N-M),M&gt;::val; }; template&lt;int N&gt; struct commondivs&lt;N,N&gt; { static const int …

2
개념을 함수에 전달
개념은 컴파일 타임 술어로 정의되므로 실제로 컴파일 타임 알고리즘에 이러한 술어를 재사용 할 수 있습니까? 예를 들어 튜플의 모든 유형이 개념을 준수하는지 확인할 수 있습니까? 내가 본 한, 어떤 식 으로든 개념을 함수에 전달하는 것은 불가능합니다.이 경우 이러한 경우에 템플릿을 사용하게됩니다. #include &lt;type_traits&gt; template&lt;typename T&gt; concept FloatLike = std::is_same_v&lt;T, float&gt;; …

1
constexpr 생성자에서 배열을 초기화하는 것이 합법적입니까?
다음 코드는 합법입니까? template &lt;int N&gt; class foo { public: constexpr foo() { for (int i = 0; i &lt; N; ++i) { v_[i] = i; } } private: int v_[N]; }; constexpr foo&lt;5&gt; bar; Clang은 수락하지만 GCC 및 MSVC는 거부합니다. GCC의 오류는 다음과 같습니다 main.cpp:15:18: error: 'constexpr foo&lt;N&gt;::foo() [with …
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.