最初にお詫び申し上げます。私の質問のタイトルが私が求めていることを正確に説明しているかどうかさえわかりません。すでにそこに(またはStackOverflow上にさえ)あります。
基本的に次のようなテンプレート化されたクラスがあります-シングルトンパターンを使用するため、すべてが静的です。実際にキーをセットに保存したり、文字列などを使用したりする理由についてのコメントは探していません。ソリューションを提供します。クラスにはもう少しありますが、それは質問には関係ありません。
template<typename T>
class MyClass
{
private:
//Constructor and other bits and peices you don't need to know about
static std::set<std::string> StoredKeys;
public:
static bool GetValue(T &Value, std::string &Key)
{
//implementation
}
static SetValue(const T Value, std::string &Key)
{
//implementation
StoredKeys.Insert(Key);
}
static KeyList GetKeys()
{
return KeyList(StoredKeys);
}
};
後で、アプリケーションの他の部分で、タイプに関係なく、すべての値のすべてのキーを取得したいと考えています。
現時点では、クラスで使用されている型は 3 つまたは 4 つだけであるとかなり確信していますが、次のように書くことができます。
KeyList Keys = MyClass<bool>::GetKeys();
Keys += MyClass<double>::GetKeys();
Keys += MyClass<char>::GetKeys();
これは、新しいタイプが使用されるたびに更新する必要があります。また、どこにも使用されていない場合、クラスをインスタンス化するという欠点もあります。
メタプログラミングがここでの答えだと思います (これも間違っている可能性があります)。おそらく何らかのマクロでしょうか?
ブーストを使用しているので、MPL ライブラリがここで役立つと思いますか?
STL のこの側面は私には少し新しいので、解決策を設計するために何が必要かを正確に理解したらすぐに、必要なだけ読んで学ぶことができてうれしいです。