Mic*_*ael 7 c++ static design-patterns
我很确定以下问题在其他地方已经有了一个很好的答案,但很难找到,因为我不知道我的问题的"名称".
我正在设计一个具有以下属性的类/对象/"东西":
所以这听起来像一个静态模板类:
template <int T>
class LookupTable{
public:
static void init(){
// create entries depending on T
}
private:
static vector<Entries> entries;
}
Run Code Online (Sandbox Code Playgroud)
我不喜欢的是我需要init()
在我的程序中调用某个地方.所以第一个问题是:如何让这个类完全自包含,不需要在某个地方显式初始化?
第二部分:实现这样一个类的一般设计方法是什么?我很高兴看到一个很好的例子的链接.
一个可能的候选人是单身人士.但我有些疑惑: - 在许多情况下,单身人士认为设计不好.如上所述,查找表是否可以?
- Singleton有点长,因为我必须使用LookupTable::getInstance()->getEntry(idx)
.
Singleton是模式,但使用更安全的变体,这种方法避免了静态初始化顺序惨败和线程竞争条件,并且因为你抱怨长度 - 我们可以通过get_entry函数进一步缩短它的索引:
template <int T>
class LookupTable{
public:
static std::vector<Entry> make_entries(){ ...}
static const std::vector<Entry>& get_entries(){
static const std::vector<Entry> instances = make_entries();
return instances;
}
static const Entry& get_entry(size_t idx){
return get_entries()[idx];
}
};
Run Code Online (Sandbox Code Playgroud)
避免单身人士所有邪恶的另一种方法是不使用单身人士 - 只需将常规旧类直接作为另一个参数传递.我使用相对繁重的表格进行许多crc函数实现...大多数东西都不会关心,然后你就不必在设计模式上掏空了.它更快.