首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ sfinae设计模式

C++ sfinae设计模式
EN

Stack Overflow用户
提问于 2016-05-02 21:44:45
回答 2查看 192关注 0票数 0

有人能告诉我如何在c++中解决这个问题吗?

错误是

不匹配'operator<<‘(操作数类型为'QList’和‘for 1*’) *this->list << form1;

myobj.h

代码语言:javascript
复制
#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

mainwindow.cpp

代码语言:javascript
复制
myObj = new MyObj<Form>(new QList<Form*>);

谢谢你对我的照顾

I编辑的

EN

回答 2

Stack Overflow用户

发布于 2016-05-02 22:49:38

我自己发答案,因为我找到了答案。这是否解决问题的正确方法?我对设计模式很感兴趣。

代码语言:javascript
复制
#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

谢谢你对我的照顾

票数 0
EN

Stack Overflow用户

发布于 2016-05-03 14:36:40

为什么不直接使用模板参数呢?

代码语言:javascript
复制
template <typename T>
class MyObj
{
public:
    MyObj()
    {
        list.push_back( new T );
    }

private:
    QList<T*> list;
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36992161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档