私は自分のプロジェクトにキャッシング機構を工夫しようとしています。基本的には、文字列から値へのマップが必要ですが、実行時に値を開いて決定する必要があります。任意のタイプのキャッシング機構
私が必要とするのは、これを実装する方法に関するアドバイスです。
私のデザインは今、このです:
- 使用
boost::any
- コンテナ
として使用std::unordered_map<std::string, boost::any>
を値を保持するために、私は元の型をお返しするためにメンバーをたいと思い、キャッシュをにできるだけ透明にしたいので、です。何かのような場合しかし、私は本当に知らない
struct internal
{
boost::any value;
template <typename T>
T& get() { return boost::any_cast<T&>(value); } // Possible?
}
:
double &p = cache.get("p");
std::string &q = cache.get("q");
hugeclass &r = cache.get("r");
私はboost::any
値、このようなプライベートな構造体を持つ代わりに考えていた:ユーザーはちょうどこのようなものを使用する必要がありますこれは可能ですか、それを実際に得る方法です。
したがって、保持されている値への参照を返す透明なキャッシングクラスを取得するにはどうすればよいですか?
ありがとうございます!あなたはおそらくこれで逃げることができ
それは別に、すべてのタイプをキャッシュするために、おそらく安全です。あなたがこれをすることができない理由はありますか? – patatahooligan
実際はそうではありませんが、これは各タイプのコンテナを用意する必要があることを意味し、これをどのように快適に一般化するかはわかりません。アイデアがあれば、私はもっと幸せになるでしょう! – senseiwa
私はちょうどテンプレートキャッシュを取得しません。ユーザーは、どこに格納されているのかによって、取得している型をすでに知っていなければならないので、複数のキャッシュを宣言する必要がなく、プログラムを実際に変更することはありません。 – patatahooligan