【发布时间】:2016-04-30 18:08:29
【问题描述】:
我总是只看到 enable_if 与条件 std::is_integral::value 一起使用。
有没有办法在条件下使用另一个模板类的对象的成员函数的函数调用?我说的函数应该是这样的:
bool someFunc()
{
if (QString(T::staticMetaObject.className()) == QString("Form")) {
return true;
}
return false;
}
目前无论我尝试什么都无法编译它。
谢谢你帮助我。
编辑:
我的问题更清楚更多代码和错误消息。
主窗口.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>
#include <type_traits>
#include <QDebug>
template <class T>
typename std::enable_if<Form<MainWindow>::staticThis->someFunc(),bool>::type
is_smth (T* obj) { return true; }
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
form = new Form<MainWindow>;
qDebug() << is_smth(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
主窗口.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "form.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
Form<MainWindow>* form;
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
form.h
#ifndef FORM_H
#define FORM_H
#include <QObject>
class FormBase : public QObject
{
Q_OBJECT
};
template <class T>
class Form : public FormBase
{
public:
Form() {}
static Form* staticThis;
bool someFunc()
{
if (QString(T::staticMetaObject.className()) == QString(Form::staticMetaObject.className())) {
return true;
}
return false;
}
};
#endif // FORM_H
form.cpp
#include "form.h"
#include "mainwindow.h"
Form<MainWindow>* Form::staticThis = NULL;
错误:
'Form::staticThis' 的值不能用于常量表达式 类型名 std::enable_if::staticThis->someFunc(),bool>::type ^
我不想在 enable_if 条件下使用 std 或其他东西的函数。我想使用我自己的功能。而且我不知道如何让它工作。也许这就是为什么你会认为代码有点忙。但我认为它现在应该显示我正在努力实现的目标。
再次感谢您
【问题讨论】:
-
不清楚你想要什么。怎么不行。您希望它如何工作?
-
我发布了更多代码并更详细地解释了它