가변 인자 템플릿 내에서 함수를 호출 이 코드에서이 코드가 잘못 호출되었지만 지금 당장 유일한 개발자 일 뿐이며 작동하도록해야합니다. 또한, 기본 유형 만 전달되며 양 끝단의 동일성은 가정합니다.은 가끔 데이터를 직렬화 한 후 소켓을 통해 데이터를 전송하기 위해 사용하고 난 기본 메시지 클래스가 기능
이 메시지 클래스가 구조체를 처리 할 수있게하려고합니다. 내 생각은 이것이었다 : 각각의 구조체에서 "Serialize/Deserialize"함수를 작성할 것이다. 그런 다음 내 LoadData 및 GetData 호출에서 "Serialize/Deserialize"함수가 있는지 확인한 다음 일반 memcpy를 호출하는 대신 호출합니다. Check if a class has a member function of a given signature
하지만 내가 "직렬화"함수를 호출하는 가정하고 방법을 잘 모르겠어요 :
나는이이 질문의 코드와 유사한 것을 사용하여 직렬화 기능을 있는지 확인 할 수 있었다. 나는 단순히 "inData.Serialize()"를 사용할 수 없다. 컴파일에 실패하기 때문이다.template<typename writeDataType>
void LoadData(writeDataType &inData)
{
//Check if writeDataType has Serialize Function.
if (serializeDoesExist)
{
inData.Serialize(m_rawMessageData);
}
else
{
int dataSize = sizeof(writeDataType);
int currentSize = m_rawMessageData.size();
m_rawMessageData.resize(dataSize + m_rawMessageData.size());
std::memcpy(&m_rawMessageData.at(currentSize), &(inData), dataSize);
}
}
어떤 도움이 많이 주시면 감사하겠습니다 :
그래서 짧은에, 나는 나의 LoadData 기능이 같은 것을보고 싶다.
참고 : 내 상사는 꼭 필요한 경우를 제외하고는 프로젝트에 외부 라이브러리를 추가하지 않습니다. 그것이 내가 Protobuf 또는 비슷한 것으로 가지 않은 이유입니다.
아주 좋기 때문에 감지 단계가 단순 해집니다. C++ 14에서만이 작업을 수행 할 수 있습니까? 그렇지 않다면 나는 우아하고 직선적이기 때문에이 글을 답으로 표시 할 것입니다. –
'std :: experimental :: detected'는 C++ 11로 구현 될 수 있습니다. (link는 가능한 구현을 제공하고,'std :: void_t '는 C++ 11에서도 가능하다.) – Jarod42