說我們有這樣的簽名:C++強制轉換爲指向相同大小類型的指針?
void frobnicate(const uint8_t* raw_memory, size_t bytes);
是否可以寫一個C++鑄造功能,這將允許鑄造任意類型(比如,例如,uint_least8_t
或signed char
,...)到uint8_t*
養活進入該功能?
所有的標準報價是reinterpret_cast
,這當然會從任何指針類型轉換。
例如:
std::vector<int> iv = ...;
std::vector<char> cv = ...;
frobnicate(sized_ptr_cast<const uint8_t*>(iv.data()), iv.size()); // must not compile
frobnicate(sized_ptr_cast<const uint8_t*>(cv.data()), cv.size()); // should compile
基本上與一些約束的reinterpret_cast
。
免責聲明:
- 請撇開
f(T*, size_t len)
是否是一個好的界面和基於迭代器接口將如何變得更好等 - 沒有
void*
請:-) (?)
CHAR_BIT == 8
寫一個函數包裝reinterpret_cast static_assert/enable_if – 2014-12-01 21:25:42
@BryanChen:只是一個'sizeof'檢查在'static_assert'然後? – 2014-12-01 21:27:58
取決於你想要它的通用性。想到''const','volatile','alignof'。 – 2014-12-01 21:36:22