实现具有未知密钥类型的映射

时间:2015-12-01 21:22:21

标签: c++ matrix

我是一名物理学家,他正在研究需要构建并缓存多个不同类型矩阵的代码。然后,矩阵需要可检索,给定一组唯一指定它们的信息('键')。我试图找到一种灵活的方法。

我目前的做法是将所有关键字捆绑在一起'信息分为单个类:

class FilterKey{
    public:
        FilterKey(const char type, const X key1, const Y* key2...);
         ~FilterKey();
        bool operator==(const FilterKey& rhs) const;
    private:
        char type; X mKey1; Y* mpKey2;
  }

用户代码将这些传递给名为" MatrixDirectory"的接口类,实例化为全局变量(但不是单例),它存储类型和缓存之间的映射:

//MatrixDirectory.hpp
class MatrixDirectory : private NonCopyable{
    public:
        void Clear(); //Calls destructors.
        void Filter(std::vector<double>& U, const FilterKey& key);
    private:
        std::map<char types, FilterCache* caches> mpFilterCaches;
};

当MatrixDirectory :: Filter遇到一个新的char类型时,它调用FilterCacheFactory,它根据char从FilterCache构造相应的派生类:

//FilterCacheFactory.cpp
namespace FilterCacheFactory{
    FilterCache* MakeFilterCache(char type) {
        if '1'==type return new OneDFilterCache();
        else if 'S'==type return new S2FilterCache();
        else if 'B'==type return new B2FilterCache();
        else REQUIRE(False, "Invalid filter type '" << type << "'!");
    }
}

并将结果插入到地图中。然后,实际的FilterCaches管理矩阵并在给定FilterKey的情况下执行任何必要的过滤。

这个,或者大约这个,我认为会起作用。但我有点担心必须对FilterKey这么明确。如果MatrixDirectory还可以存储键入不同类型的FilterCaches,那会更好。我想我可以用可变参数模板做到这一点,但我不想直接#include一切。还有另一种方式吗?

0 个答案:

没有答案