將shared_ptr<char>
轉換爲shared_ptr<unsigned char>
有沒有好的方法?將std :: shared_ptr <char>轉換爲std :: shared_ptr <unsigned char>
我想出了下面的,但它看起來不是很乾淨。
int main(int argc, char** argv)
{
std::shared_ptr<char> p1 = std::make_shared<char>();
std::shared_ptr<unsigned char> p2 = std::shared_ptr<unsigned char>(
reinterpret_cast<unsigned char*>(p1.get()),
[p1](unsigned char*) {});
}
我本來不認識拉姆達捕獲,並認爲有一個bug,但已經想通了,我不覺得有什麼。事實上,這看起來像一個更笨重,但比'reinterpret_pointer_cast'更普遍的解決方案。實際上,'reinterpret_pointer_cast'似乎是個不錯的主意。它只能將重新解釋移開一層。如果存在多級指針(例如'*** char'),則指針會崩潰併產生更多語義技巧變得必要的情況。而在這種情況下,lambda捕獲可以更均勻地應用。 – grovkin