C++斯菲奈设计模式
C++ sfinae design pattern
有人可以告诉我如何在C ++中解决这个问题吗?
错误是
与"运算符<<"不匹配(操作数类型为"QList"和 "表格1*"( *此>列表<<表格1;
妙珞
#ifndef MYOBJ_H
#define MYOBJ_H
#include <QList>
#include "form.h"
#include "form1.h"
template <typename T>
class MyObj
{
public:
MyObj(QList<T*>* list)
{
this->list = list;
if (std::is_same<T,Form>::value) {
form = new Form;
*this->list << form;
}
if (std::is_same<T,Form1>::value) {
form1 = new Form1;
*this->list << form1;
}
}
QList<T*>* list = NULL;
Form* form = NULL;
Form1* form1 = NULL;
};
#endif // MYOBJ_H
主窗口.cpp
myObj = new MyObj<Form>(new QList<Form*>);
谢谢你帮助我
我编辑了
我自己发布了一个答案,因为我找到了一个。这是解决问题的正确方法吗?我对设计模式非常感兴趣。
#ifndef MYOBJ_H
#define MYOBJ_H
#include <QList>
#include "form.h"
#include "form1.h"
#include <QDebug>
template <typename T>
class MyObj
{
public:
MyObj(QList<T*>* list)
{
this->list = list;
if (std::is_same<T,Form>::value) {
form = new Form;
appendFunc(form);
}
else if (std::is_same<T,Form1>::value) {
form1 = new Form1;
appendFunc(form1);
}
}
QList<T*>* list = NULL;
Form* form = NULL;
Form1* form1 = NULL;
template <typename U>
std::enable_if_t<std::is_same<T,U>::value,void>
appendFunc(U* a) {
qDebug() << "test100";
*this->list << a;
}
void appendFunc(...) { }
};
#endif // MYOBJ_H
谢谢你帮助我
为什么不直接使用模板参数?
template <typename T>
class MyObj
{
public:
MyObj()
{
list.push_back( new T );
}
private:
QList<T*> list;
};
相关文章:
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 资源管理设计模式
- 用于在回调中调用解析器的设计模式
- 设计帮助 - 为不同类型的消息处理通用接口的设计模式
- 在这种情况下我应该使用哪种设计模式
- C++中物体改变识别的设计模式?
- 确保所有构造函数调用相同的函数 c++ 设计模式
- 需要实例化不同类/对象并在启动时确定的硬件插槽的设计模式
- 设计模式,以避免不必要地添加抽象函数以适应新功能
- 工厂设计模式优化
- 使用C++模板的数据映射器设计模式
- 为什么以及如何使用原型设计模式
- 具有多个继承共享一个资源的对象 - 寻找良好的设计模式
- 在C++中创建观察器设计模式的好方法
- 现代C++在多大程度上消除了对设计模式的需求?
- 对于存储另一个类所需信息的类,例如其构造,是否有设计模式?
- 下面抽象工厂设计模式的实现是正确的吗
- sql记录集函数的状态设计模式
- 是否有可以处理方法调用依赖关系的设计模式?
- 使用 C++ 设计模式