C++斯菲奈设计模式

C++ sfinae design pattern

本文关键字:设计模式 C++      更新时间:2023-10-16

有人可以告诉我如何在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;
};