2017-12-12 13 views
2

나는이 코드를 사용해야한다고 생각하지만 그렇지 않습니다!기본 클래스 배열 멤버 변수를 기본 클래스 생성자를 통해 초기화 됨 drived 클래스 템플릿 값

class base 
{ 
    std::array<uint8_t, 8> m_ID; 
public: 
    base(std::array<uint8_t, 8> id) :m_ID(id) 
    { 

    } 
} 
template<char ...Ts> 
class derived:base(Ts...) 
{ 
} 
class MyClass: public derived<'1','2','3','4','5','6','7','8'> 
{ 
} 

어떻게하면됩니까? 아이디어는 템플릿 값에서 ID 값을 전달할 수 있다는 것입니다.

MyClass가 완전하지 않다는 오류가 나타납니다. (불완전한 유형은 허용되지 않습니다)

+0

나는 기수가 매개 변수 팩에서 채워지는 8 개의 값의 배열을 가지고있는 것이 이상하다는 것을 알게되었습니다. 사용자가 8 개 이하의 매개 변수를 제공하면 어떻게 될까요? –

답변

3

그냥 제대로 기본 클래스 생성자를 호출 할 필요가 : 생성자 초기화 목록에서 중괄호의 내부 쌍은 하나의 uint8_t의 변환 필요하다고

#include <array> 
#include <cstdint> 

class base 
{ 
    std::array<std::uint8_t, 8> m_ID; 
public: 
    base(std::array<std::uint8_t, 8> id) :m_ID(id) 
    { 

    } 
}; 

template<char ...Ts> 
class derived: public base 
{ 
    public: 
    derived() : base{ { Ts... } } { } 
}; 

class MyClass: public derived<'1','2','3','4','5','6','7','8'> 
{ 
}; 

int main() { 
    MyClass d; 
} 

주 배열로.

+0

'MyClass' 클래스 정의 다음에 세미콜론을 잊어 버렸습니다. 그리고'(void) MyClass d; '는 유효한 C++ 코드가 아닙니다. – Constructor

+0

@Constructor SO에 대한 답변을 언제든지 개선하십시오. – Jodocus