|
안녕하세요?
전 소켓프로그래밍을 공부하던중 STL에 관심을 가지게 되었습니다.
소켓API는 C의 문자배열로 데이터를 주고 받아야 합니다.
그래서 STL로 자료를 처리한고 C배열로 바꿔야 합니다.
그런데 패킷을 소켓으로 보낼때 패킷의 크기라던가 하는 정보도 같이 보내야 하는데 이런 정보는 정수로 되어 있습니다.
그래서 포인터를 이용해서 정수를 문자배열로 저장을 했습니다.
int pnt = 0;
char buff[1024];
*((int *)buff) = 10;
pnt += sizeof(int);
이런식으로요.
그 다음 STL의 컴포넌트를 배열로 복사했습니다.
string stlBuff;
copy(stlBuff.begin(), stlBuff.end(), &buff[pnt]);
이것을 send(), recv()로 주고 받았습니다.
그던데 이것을 정수와 string으로 분리하지 않고 바로 string으로 저장해 파싱하는 함수로 보냈습니다.
(다른 쓰레드에 있는 함수입니다. 보낼때는 deque<string>으로 만든 큐를 이용합니다. 네트웍 수신딜레이 좀 줄여보기 위한 노력입니다.)
그런데 이부분에서 제대로 데이터가 가지 않습니다.
결국 받은 즉시 정수와 string으로 분리해 처리하면 괜찮다는 것을 알았습니다.
말이 길어졌습니다.
결국 제가 알고 싶은것은 "STL의 string에 포인터를 이용해 정수를 저장할수 없는가?"입니다.
그리고 "그게 불가능하다면 STL자료구조중 문자와 정수를 함께 저장가능하고 문자배열로 만들수 있는 자료구조가 있는가?" 입니다.
지금은 정수와 string을 포함하는 클래스를 만들어 STL로 처리하고 있습니다.
하지만 복잡해져서 STL로 간편하게 할 수 있는 방법은 없는지 궁금합니다.
다른 사람든은 아무 문제없이 해결하는 것을 저만 처리하지 못하는지 이런 문제는 찾기가 쉽지 않네요.
2번째 질문입니다.
"매개변수를 가지는 생성자가 있는 클래스의 배열을 힙에 어떻게 만드는가?" 입니다.
매개변수를 가지는 생성자가 있는 클래스를 힙에 만들면 이렇게 되겠죠?
class myClass
{
public:
myClass(int num);
int size;
}
myClass::myClass(int num)
{
size = num;
}
void main()
{
myClass *newClass;
newClass = new myClass(10);
}
그리고 파라미터가 없는 생성자를 가진 클래스의 배열을 힙에 할당하려면 이렇게 하면 되겠죠?
void main()
{
myClass *newClass;
newClass = new myClass[100];
}
그런데 처음에 보인 그 클래스의 배열을 힙에 할당하려면 어떻게 해야 할까 하는것 입니다.
별것 아닌것 같은데 잘 안됩니다.
이런 경우는 어떻게 해야 할까요?
혹시 아시분 계시면 답변 부탁드립니다.
긴 글 보아 주셔서 감사드립니다.
그럼 이만...
|