RAMの最適化の目的で、データをstd::array<char, N>
として保存する必要があります。Nは配列の "templated size_t"サイズです。 私は、あらゆる種類のデータ(数値と文字)を含む膨大な量の "Line"オブジェクトを管理する必要があります。C++ doubleをcharに置き換えてstd :: arrayに置き換えます。
だから私のラインのクラスがある:
template<size_t NByte>
class Line {
public:
Line (std::array<char, NByte> data, std::vector<size_t> offset) :
_data(data), _offset(offset) {}
template<typename T>
T getValue (const size_t& index) const {
return *reinterpret_cast<const T*>(_data.data() + _offset[index]);
}
template<typename T>
void setValue (const size_t& index, const T value) const {
char * new_value = const_cast<char *>(reinterpret_cast<const char *>(&value));
std::move(new_value, new_value + sizeof(T), const_cast<char *>(_data.data() + _offset[index]));
}
private:
std::array<char, NByte> _data;
std::vector<size_t> _offset;
};
私の質問は以下のとおりです。
- セッターとゲッター機能を行うには良い方法はありますか?
- これはメモリリークに対して堅牢ですか?
- 生産/リリースでこのコードを使用する際に問題はありますか?
編集:それらの背後にある質問です:メモリ内のバイナリデータを扱うとセッターを通じて、最終的なユーザーのために、「人間が理解できる」インターフェースを提供し、ゲッタリングする他の方法はありますか?
'getValue'と' setValue'関数は、いくつかの 'operator []'オーバーロードで置き換えられるようです。しかし、関数内のコードを「より良い」ものにするのに役立たないでしょう。一方で、最適化されたコードの欠点を学びました。これは通常恐ろしいことです。 –
ちなみに、コードが正常に機能していて、そのコードの「レビュー」が必要な場合は、http://codereview.stackexchange.com/があります。 –
@StoryTeller:私の側からのクリッキング:-( – Elendil