2013-07-19 5 views
0

이전에 질문을 받았다면 사과드립니다. 확실한 답변이 없으므로 수색이 가능합니다. 가능한지 궁금해지기 시작했습니다. 나는 C++ 11을 배우려고 노력하고 있으며 가변성 템플릿에 문제가있다. 나는 variadic 함수 매개 변수의 개념을 이해하고, 왜/재귀가 unwrap과 처리에 사용되는지를 생각하지만, 클래스 생성자에서 비슷한 개념을 가진 문제를 겪고있다.C++ 11 가변 클래스 생성자에서 완전히 임의의 private 멤버 튜플을 생성 할 수 있습니까?

혼합 유형 컨테이너 (터플이라고 가정)가 개인 구성원으로있는 가변적 템플릿 클래스를 만들고 싶다고 가정 해 보겠습니다. 클래스 객체가 생성 될 때 다양한 유형의 객체 중 임의의 수를 해당 튜플에 푸시 할 수 있습니까? 뭔가 같이 :

#include <tuple> 

// forward declaration - is this needed? 
template <class ... args> 
class myClass; 

template <class H, class ... T> 
class myClass <H, T ...> 
{ 
private: 
    std::tuple<anything can go here> mycontainer; 
public: 
    myClass(const H& head, const T& ... tail) 
    { 
      push head into mycontainer; 
      do some sort of recursion with tail; 
    } 
} 

나는 표준 : tuple_cat 및 표준 : : make_tuple과 함께 주위에 나사없는 나는 잠시 동안 뭔가에 있던 것을 생각했지만, 운이 있었어요.

저는 C++과 관련이있어서 오랜 시간이 걸렸습니다. 그렇다면 사과해야합니다. 이제 막 C++ 11 기능에 대한 정보를 읽은 후이를 살펴보기 시작했습니다.

편집 : 그냥 내가 GCC의 4.8.x 및/또는 Visual Studio 2012

+0

VS2012의 릴리스 버전은 가변 템플릿을 지원하지 않습니다. VS에 가변성을 원하면 2012 년 11 월 CTP 컴파일러 릴리스 또는 VS2013 미리보기가 필요합니다. – Casey

+0

@Casey : 고마워요. 2013 미리보기가 표시됩니다. – thekamz

답변

1

네, 그 가변 형식 중 일부에서 구성원을 구성하는 것이 가능에있어 덧붙였다. 예를 들면 다음과 같습니다.

template <class ... T> 
class myClass { 
    std::tuple<T...> mytuple; 
public: 
    // Constructor that takes const refs to the Ts and constructs tuple: 
    myclass(const T&... args) : mytuple(args...) {} 

    // Perfect forwarding constructor that will try to construct tuple 
    // from arbitrary lvalue/rvalue parameters: 
    template <class... Args> 
    myclass(Args&&... args) : mytuple(std::forward<Args>(args)...) {} 
}; 

좀 더 구체적으로 묻는다면 더 자세하게 설명해야합니다.

+0

감사합니다. 완벽한 포워딩 생성자를 읽어야합니다. 나는 내가 생각했던 것만 큼 준비가되어있는 곳이 어디에도 없다고 생각한다. 이것을 사용하면 std :: tuple의 get (int) 함수를 사용할 myclass.get (int)을 다음과 같이 구현할 수있는 것처럼 보입니다. 'auto get (int element) -> decltype mytuple.get (요소)) {return mytuple.get (요소); }' 그러나 이것은 서툴러 보인다. 올바른 방법은 무엇입니까? – thekamz

+0

와우, 나는 표준을 의미 : : <1> (mytuple) – thekamz

+0

괜찮아, 난 완전히 잃어버린. 독서 시간! @ 케이스 : 머리를 시작 주셔서 감사합니다. – thekamz