2014-04-09 4 views
5

다음 코드를 가지고 있지만 실제로이 코드에서 using BaseTypeX::BaseTypeX이 무엇을하는지 이해하지 못합니다. 그 나머지는 내가 그것은 당신이 Internal::ClassXImpl<TReturn, TArgs...>의 모든 생성자를 상속 의미누군가이 코드에서 BaseTypeX :: BaseTypeX을 사용하여 설명 할 수 있습니까?

template<typename TReturn, typename... TArgs> 
class ClassX<TReturn(TArgs...)> : public Internal::ClassXImpl<TReturn, TArgs...> { 
public: 

    using BaseTypeX = Internal::ClassXImpl<TReturn, TArgs...>; 
    using BaseTypeX::BaseTypeX; // what is this doing exactly? 

    inline ClassX() noexcept = default; 

    // member function 
    template<class TThis, class TFunc> 
     inline ClassX(TThis* aThis, TFunc aFunc) { 
      this->bind(aThis, aFunc); // note bind is implemented in the ClassXImpl class 
     } 

답변

10

그래서 등 템플릿 특수화를 설명하지 마십시오 이해합니다. 더 간단한 예는이 더 잘 설명 될 수 있습니다

struct Foo 
{ 
    Foo(int); 
    Foo(int, double); 
    Foo(std::string); 
}; 

struct Bar : Foo 
{ 
    using Foo::Foo; 
}; 

int main() 
{ 
    Bar b1(42); // OK, Foo's constructors have been "inherited" 
    Bar b2(42, 3.14); // OK too 
    Bar b2("hello"); // OK 
} 

using Foo::Foo없이, 당신은 선언하고 Bar의 모든 생성자를 정의하고 각각의 각 Foo 생성자를 호출해야합니다.

+1

+1 와우 나는 그것을 몰랐다! 정말 고마워. 시간이 지나면 대답을 받아 들여 – bjackfly

1

템플릿 클래스 ClassX은 기본 생성자를 상속 받음을 의미합니다. 주제에 대한 설명은 here을 참조하십시오.

+0

+1 감사합니다. 도움이됩니다. 다른 대답의 예제는 실제로 나를 위해 그것을 확고히했습니다. – bjackfly