C++ 03에서는이 작업을 수행 할 수 없습니다. 그러나 C++ 11 생성자 이니셜 라이저 목록의 배열을 초기화 할 수 있습니다 :
board::board()
: spot { 1, 2, 1, 2, /* ... */ }
{ }
당신은 값을 입력하거나 "N 반복 값"을 제공하기 위해 마법의 가변 인자 템플릿으로 올 수 있습니다 (유형이 통합되어있는 한). 또한 누락 된 요소는 0으로 초기화됩니다 (예 : char spot[4] { 1, 2 };
).
액세스하려면 클래스 내에 spot[i]
을 사용하고 필요에 따라 적합한 접근 함수를 작성할 수 있습니다 (클래스가 단지 전달하는 경우 항상 염려해야하지만 실제로 클래스를 캡슐화하기를 원합니다). 일부 고차원 기능).
배열을 고정 값으로 초기화하는 템플릿 코드를 보려면 별도의 질문으로 게시해야합니다.
업데이트 : 여기에 값 2
모든 배열 요소를 초기화 순진 템플릿 트릭입니다.
#include <iostream>
#include <utility>
#include <prettyprint.hpp>
class Foo
{
int arr[10];
template <typename T, T> struct Filler { };
template <typename T, bool, unsigned int, T...> struct FillHelper { };
template <typename T, unsigned int I, T V, T ...Vals>
Foo(FillHelper<T, true, I, V, Vals...>)
: arr { V, Vals... } { }
template <typename T, unsigned int I, T V, T ...Vals>
Foo(FillHelper<T, false, I, V, Vals...>)
: Foo(FillHelper<T, I == 1, I - 1, V, V, Vals...>()) { }
template <typename T, unsigned int N, T V>
Foo(Filler<T, V>, T const (&)[N])
: Foo(FillHelper<T, N == 1, N - 1, V>())
{ }
public:
Foo() : Foo(Filler<int, 2>(), arr)
{
std::cout << "Foo: " << arr << "\n";
}
};
int main()
{
Foo x;
}
출력 : Foo: [2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
': spot {}'평범한 오래된'int arr [10] = {};'과 같은 멤버를 0으로 초기화하겠습니까? – Kos
@Kos : 예. 또한, C++ 03에서도 (: C++ 98 :-)에서는': spot()'도 마찬가지입니다). –
나는 템플릿 물건을보고 싶습니다. 감사합니다 – Chubsdad