«variadic-templates» 태그된 질문

Variadic 템플릿은 가변 개수의 매개 변수를 사용하는 템플릿입니다.

8
일치하는 함수 포인터를 호출하기 위해 튜플 "풀기"
std::tuple다양한 수의 값 으로 저장하려고 하는데 나중에 저장된 유형과 일치하는 함수 포인터를 호출하기위한 인수로 사용됩니다. 해결하기 위해 고심하고있는 문제를 보여주는 간단한 예를 만들었습니다. #include <iostream> #include <tuple> void f(int a, double b, void* c) { std::cout << a << ":" << b << ":" << c << std::endl; } template …

6
make_unique와 완벽한 전달
std::make_unique표준 C ++ 11 라이브러리에 함수 템플릿 이없는 이유는 무엇 입니까? 나는 찾는다 std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3)); 조금 장황하다. 다음이 훨씬 좋지 않을까요? auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3); 이것은 new멋지게 숨기고 유형을 한 번만 언급합니다. 어쨌든, 여기에 구현하려는 나의 시도는 make_unique다음 과 같습니다. template<typename T, typename... Args> std::unique_ptr<T> …

1
variadic 함수의 모든 인수에 대해 std :: forward를 어떻게 호출합니까?
난 그냥 일반 개체 팩토리를 작성하고 부스트 전 처리기 메타 라이브러리를 사용하여 가변 템플릿을 만들었습니다 (2010을 사용하고 지원하지 않음). 내 함수는 rval 참조를 사용하고 std::forward완벽한 포워딩을 수행하기 위해 C ++ 0X가 나오고 표준 컴파일러가있을 때 실제 가변 템플릿으로이 작업을 수행 할 것이라고 생각했습니다. 그래도 내가 std::forward논쟁을 불러 일으키겠습니까? template <typename …

2
“……”토큰의 의미는 무엇입니까? 즉, 매개 변수 팩의 이중 생략 연산자
gcc의 현재 구현 된 새로운 C ++ 11 헤더를 탐색하는 동안 "......"토큰을 발견했습니다. 다음 코드가 [ideone.com을 통해] 잘 컴파일 되는지 확인할 수 있습니다 . template <typename T> struct X { /* ... */ }; template <typename T, typename ... U> struct X<T(U......)> // this line is the important one { …

2
가변 템플릿의 맥락에서“…”토큰에 대한 규칙은 무엇입니까?
C ++ 11에는 다음과 같은 가변 템플릿이 있습니다. template< class T, class... Args > unique_ptr<T> make_unique( Args&&... args ) { return unique_ptr<T>(new T(std::forward<Args>(args)...)); } 약간의 호기심이에 대해 다음과 같습니다 표현이 std::forward<Args>(args)...모두 사용 Args하고 args있지만, 단 하나의 ...토큰. 또한 std::forward하나의 템플릿 매개 변수와 하나의 인수 만 취하는 비가 변 템플릿 함수입니다. …

4
가변 템플릿 인수를 저장하는 방법은 무엇입니까?
나중에 사용하기 위해 어떻게 든 매개 변수 팩을 저장할 수 있습니까? template <typename... T> class Action { private: std::function<void(T...)> f; T... args; // <--- something like this public: Action(std::function<void(T...)> f, T... args) : f(f), args(args) {} void act(){ f(args); // <--- such that this will be possible } } 그런 …

11
예쁜 인쇄 std :: tuple
이것은 예쁘게 인쇄되는 STL 컨테이너 에 대한 이전 질문에 대한 후속 조치로 , 매우 우아하고 완전히 일반적인 솔루션을 개발할 수있었습니다. 이 다음 단계에서는 std::tuple<Args...>가변 템플릿을 사용하여에 대한 pretty-printing을 포함하고 싶습니다 (따라서 이것은 엄격하게 C ++ 11입니다). 의 경우 std::pair<S,T>간단히 std::ostream & operator<<(std::ostream & o, const std::pair<S,T> & p) { return …


6
Variadic 템플릿 팩 확장
가변 템플릿과 기능을 배우려고합니다. 이 코드가 컴파일되지 않는 이유를 이해할 수 없습니다. template<typename T> static void bar(T t) {} template<typename... Args> static void foo2(Args... args) { (bar(args)...); } int main() { foo2(1, 2, 3, "3"); return 0; } 컴파일 할 때 오류와 함께 실패합니다. 오류 C3520 : 'args':이 컨텍스트에서 매개 …

3
C ++에서 유형 목록의 직교 곱을 작성하는 방법은 무엇입니까?
자기 설명. 기본적으로 다음과 같이 유형 목록이 있다고 가정하십시오. using type_list_1 = type_list<int, somestructA>; using type_list_2 = type_list<somestructB>; using type_list_3 = type_list<double, short>; 가변 목록 유형일 수 있습니다. 직교 제품의 유형 목록을 얻으려면 어떻게합니까? result = type_list< type_list<int, somestructB, double>, type_list<int, somestructB, short>, type_list<somestructA, somestructB, double>, type_list<somestructA, somestructB, short> >; …

3
다양한 템플릿 : 그룹에서 인수 펼치기
두 가지 인수를 취하는 함수가 있습니다. template <typename T1, typename T2> void foo(T1 arg1, T2 arg2) { std::cout << arg1 << " + " << arg2 << '\n'; } 그리고 인수를 쌍으로 전달 해야하는 가변적 인 것 : template <typename... Args> void bar(Args&&... args) { static_assert(sizeof...(Args) % 2 == 0); …

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.