指向抽象模板单例类的指针向量C++?
C++ vector of pointers to abstract template singleton class?
如果这只是一团糟并且有更好的方法可以做到这一点,我不会感到震惊,但这就是我正在使用的。
我有一个基类 Foo,所有派生类都是单例。 而不是为每个派生编写实例函数,我想在Foo中对其进行模板化,因为它永远是同一件事。
template<typename T>
class Foo{
private:
static T single;
public:
static T* instance();
virtual void fun() = 0;
};
template<typename T>
T Foo<T>::single;
template<typename T>
T* Foo<T>::instance(){
return &single;
}
class A : public Foo<A>{
public:
void fun();
};
class B...
class C...
当我尝试制作一个类 Bar 时,就会发生麻烦,该类 Bar 将具有指向 Foo 类型的指针向量。 它将被视为一个堆栈,并将从顶部的Foo运行代码,并在代码被推送或弹出时运行代码。
class Bar{
private:
std::vector</*types of Foo<T>*/> fooStack;
public:
void init();
void updateFoo();
void pushFooStack(Foo* f);
void popFooStack();
};
#include "FooA.h"
void Bar::init(){
//Run Box initializing code
pushFooStack(A::instance())
return;
}
void Bar::updateFooStack(){
if(!fooStack.empty()){
//Run Foo<T> update code.
}
return;
}
void Bar::pushFooStack(Foo* f){
if(!fooStack.empty()){
//Run Foo<U> pause code
fooStack.pop_back();
}
fooStack.emplace_back(f);
//Run Foo<U> push code
return;
}
void Bar::popFooStack(){
if(!fooStack.empty()){
//Run Foo<T> pop code
fooStack.pop_back();
}
if(!fooStack.empty()){
//Run Foo<U> resume code
}
return;
}
我不能有一个模板化类的向量,我已经看到了各种类似问题的建议,比如创建一些类 IFoo,或使用 std::unique_ptr 或 boost::variant,但它们中的每一个似乎都遇到了自己的问题,通常是某种形式的"对 Foo::instance 的未定义引用或"无效的模板参数"/"类型/值不匹配"。 也许我错过了一些关于这些解决方案的东西。
如果有人知道我如何让它工作,或者可能只是一种更好的方法来完全设置整个事情,那么我很想听听。 不必为Foo的每个派生重写相同的实例函数会很好,但它至少可以工作,所以如果让它工作本身就是一个麻烦,这也是一种选择。
提前谢谢你,任何可以帮助我的人。
我不会为此使用单例模式。假设我们想更新 Bar 对象中的 Foos,我们可以让 Foo 从 IFoo 派生,但没有模板。如果你真的想确保它只被实例化一次,你可以在它的构造函数中有一个静态布尔值,你在调用它时设置,并在运行时已经设置的情况下断言或抛出异常。
如果有充分的理由使用单例模式,那么您最想做的很可能是拥有一个模板类派生自的非模板接口,并且该接口是您在 Bar 数组中存储指针的接口。
希望这有帮助吗?
相关文章:
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 如何更改唯一指针向量的可见性
- 如何在基类指针向量的元素上应用重载的多态函数
- C++:添加新结构时,结构指针向量中的所有元素都会更新
- 包含指向其他结构的指针向量的结构
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 如何将字符串指针数组转换为字符串类型的智能指针向量?
- 初始化可变数据结构中的共享指针向量
- 指向具有 decltype 的函数的指针向量
- push_back指向指针向量的指针
- 使用指针向量(带代码)C++(以及对其使用的便利性的怀疑)时出现问题
- 我可以做些什么来改进指针向量中的此搜索?
- 指向指针排序向量的指针向量的 C++ 向量
- 初始化用户定义类的指针向量
- 函数无法识别我在C++传递节点指针向量?
- 如何声明指向类对象的指针向量?
- 指向结构的指针向量的元素具有相同的地址
- 删除指向抽象类的指针向量
- 当我返回指向结构的指针向量时出现段错误
- 用基于范围的for循环填充指针向量