मान लीजिए कि T
एक पीओडी प्रकार है जिसमें पॉइंटर नहीं होता है, और मैं टी को क्रमबद्ध करना चाहता हूं (कुछ अन्य डेटा के अलावा)। मैंने यह करने के लिए नीचे दिए गए फ़ंक्शंस बनाए हैं:क्या पीओडी डेटा को सीधे सर सरणी में कास्ट करके सुरक्षित करना सुरक्षित है?
template<class T> void serialize(const T& source, char*& dest)
{
*(T*)dest = source;
dest += sizeof(T);
}
template<class T> void deserialize(T& dest, char*& source)
{
dest = *(T*)source;
source += sizeof(T);
}
क्या इससे कोई समस्या हो सकती है, या क्या ऐसे कोई कंपाइलर्स हैं जहां यह काम नहीं करेगा? दूसरे शब्दों में, कोड होगा:
template<class T> bool check_sanity(const T& obj)
{
std::unique_ptr<char[]> buffer { new int[sizeof(T)] };
serialize(obj, buffer);
T new_obj;
deserialize(new_obj, buffer);
return new_obj == obj;
}
कभी झूठी वापसी? (मान लें कि टी पीओडी है और कोई भी == ऑपरेटर ओवरलोड नहीं किया गया है)।
मैं एमपीआई के साथ संयोजन के लिए इन क्रमिकरण विधियों को लिख रहा हूं, जहां उनका उपयोग बहीखाता के लिए आवश्यक कुछ डेटा वितरित करने के लिए कार्यक्रम की शुरुआत में किया जाएगा, इसलिए एक ही कार्यक्रम हमेशा क्रमबद्ध और deserializing होगा डेटा।
मुझे यकीन नहीं है कि आप सख्त-एलियासिंग नियमों को कैसे तोड़ रहे हैं क्योंकि 'टी *' 'char *' और 't *' पर वापस वैध होना चाहिए .. मैंने सोचा कि 'reinterpret_cast' क्या था .. – Brandon