언젠가 C 언어로 NSMutableArray와 비슷한 저장 용량을 가진 클래스를 생성하기로 결정했습니다. (벡터는 이런 종류의 goto 데이터 타입이지만 어쨌든 내 자신을 만들었습니다.) 그래서 C++에서 mutableArray 클래스를 만들었고, 지금까지는 훌륭하게 작동합니다. 원하는 경우 객체를 추가 및 제거하고 특정 인덱스에 삽입 할 수 있습니다. 배열의 크기를 지정하지 않고도 가능합니다.다양한 데이터 유형의 C++ 가변 배열?
내 문제는 : 지금까지 int 형식의 개체 만 저장할 수 있습니다. 특정 유형에 대해 완전히 새로운 클래스를 만들 필요없이 다른 데이터 유형을 보유 할 수 있도록 할 수있는 방법이 있습니까? 같은 mutableArray에 다른 데이터 유형의 객체를 저장할 수있는 것에 관심이 없으며, 단지 내 mutableArray가 보유하는 데이터 유형을 지정할 수 있기를 원합니다.
내 헤더 파일 :
#define MUTABLEARRAY_H
class mutableArray
{
public:
mutableArray();
virtual ~mutableArray();
void initWithSize(int length);
void initWithArrayThroughIndeces(int nums[], int minimum, int maximum);
void addObject(int number);
void insertObjectAtIndex(int number, int index);
void changeSize(int length);
void removeLastObject();
void removeObjectAtIndex(int index);
int objectAtIndex(int index);
int lastObject();
int firstObject();
int countObjects();
protected:
private:
int *start;
int amount;
};
#endif // MUTABLEARRAY_H
내 CPP 파일 : 그래서 거기가
#include "mutableArray.h"
mutableArray::mutableArray()
{
//ctor
start = new int;
amount = 0;
}
mutableArray::~mutableArray()
{
//dtor
}
void mutableArray::initWithSize(int length){
amount = length;
}
void mutableArray::initWithArrayThroughIndeces(int nums[], int minimum, int maximum){
amount = maximum - minimum;
start = nums + minimum;
}
void mutableArray::addObject(int number){
amount++;
start[amount] = number;
}
void mutableArray::insertObjectAtIndex(int number, int index){
amount++;
int j = 0;
for (int *i = start + amount; i > start; i--){
if (j >= index){
start[j + 1] = *i;
}
j++;
}
start[index] = number;
}
void mutableArray::removeLastObject(){
amount--;
}
void mutableArray::removeObjectAtIndex(int index){
amount--;
int j = 0;
for (int *i = start; i < start + amount; i++){
if (j != index){
start[j] = *i;
j++;
}
}
}
int mutableArray::objectAtIndex(int index){
return start[index];
}
int mutableArray::lastObject(){
return start[amount];
}
int mutableArray::firstObject(){
return *start;
}
int mutableArray::countObjects(){
return amount;
}
. 어떤 도움을 많이 주시면 감사하겠습니다.
예 (앞에서 언급 한'std :: vector'처럼) 템플릿을 만듭니다. 경고 : 템플리트 코드는 템플릿이 아닌 코드와 같은 .h/.cpp 파일로 분할 될 수 없습니다. 따라서 .cpp의 코드를 .h로 다시 이동 시키거나 .ht (하단)에 .cpp를 포함시켜야합니다. 템플릿은 TU (번역 단위)에 로컬이기 때문에 ODR (하나의 정의 규칙)을 위반하지 않습니다. 이에 대한 자세한 정보는 쉽게 찾을 수 있습니다. – Borgleader
하나의 배열 인스턴스가 다른 유형의 객체를 저장할 수 있도록 하시겠습니까? – juanchopanza