c++ - STL 元编程 - 在编译时创建了哪些类型的模板类?

标签 c++ stl metaprogramming template-meta-programming

首先抱歉,我不确定我的问题标题是否准确地解释了我的问题 - 我已经通过谷歌查看过,但我不确定我的搜索查询中需要哪些术语,所以答案可能已经在那里(甚至在 StackOverflow 上)。

我有一个模板化类,基本上如下所示 - 它使用单例模式,因此一切都是静态的,我不是在寻找关于为什么我将键存储在一个集合中并使用字符串等的评论,除非它实际上提供了解决方案。该类(class)还有更多内容,但这与问题无关。

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();

每次使用新类型时都需要更新。如果它没有在任何地方使用,它也有实例化类的缺点。

我认为(同样我可能是错的)元编程是这里的答案,也许是某种宏?

我们正在使用 boost,所以我猜 MPL 库在这里可能会有用?

STL 的这个方面对我来说有点新,所以我很乐意阅读并尽可能多地学习,只要我确切地知道它是什么,我就需要学习设计解决方案。

最佳答案

StoredKeys 移动到非模板基类 class MyClassBase 中,或将 AllStoredKeys 静态成员添加到非模板基类中。

或者,创建一个从 SetValue 调用的静态初始化方法,将指向 StoredKeys 的指针添加到静态列表。

关于c++ - STL 元编程 - 在编译时创建了哪些类型的模板类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11012708/

相关文章:

c++ - 删除期间的 CPP Vector 构造函数调用

r - 是否可以通过 "wrap"R 函数来修改其功能?

ruby-on-rails - 自动创建缺失的连接模型

c++ - 从属名称 T 被解析为非类型,但实例化产生类型

c++ - 在 C++ 中对字符串数组进行排序

c++ - std::ostringstream 问题

c++ - 我的 SFML/C++ 程序按预期工作,但如何使移动变慢?

c++ - cin.clear() 不重置 cin 对象

c++ - 将自己的迭代器与 std::string 一起使用

c++ - 在局部变量值上设置 Visual Studio(条件)断点