C++ 如何获取类函数名列表?Qt C++;

C++ 如何获取类函数名列表?Qt C++;,c++,qt,class,C++,Qt,Class,例如,我有以下代码: class MyClass : public QObject { Q_OBJECT public: void MyClass() { QStringList selfFunctionList; //Get functions list qDebug()<<selfFunctionList; } void function1(){} void function435(){} }; class

例如,我有以下代码:

class MyClass : public QObject
{
    Q_OBJECT
public:
    void MyClass()
    {
    QStringList selfFunctionList;
    //Get functions list
    qDebug()<<selfFunctionList;
    }
    void function1(){}
    void function435(){}
};
class MyClass:公共QObject
{
Q_对象
公众:
void MyClass()
{
QStringList自功能列表;
//获取函数列表

qDebug()C++没有您在这里想要的那种自我意识()。也就是说,没有编程方法可以获取函数的字符串名称并将其输入到容器中,而无需手动编码。Qt使用其信号和插槽执行的操作非常有限,但通常不使用函数。因此,您必须编写

MyClass::MyClass(...)
{
   selfFunctionList << function1 << function345 << ... etc.
}
MyClass::MyClass(…)
{

selfFunctionList您可以使用staticMetaObject来实现这一点

class Test : public QObject
{
    Q_OBJECT
public:
    explicit Test(QObject *parent = 0) :
        QObject(parent)
    {
        for (int n = 0; n < staticMetaObject.methodCount(); n++) {
           functions.append(QString::fromLocal8Bit(staticMetaObject.method(n).name()));
        }
        qDebug() << functions;
    }

signals:
    void testSignal();

private slots:   
    void privateTestFunction() {}

public slots:   
    void publicTestFunction() {}

private:
    QStringList functions;
};

你知道函数指针吗?我知道函数指针,但你的意思是什么?我不太清楚你想要实现什么。我想在不向函数体添加额外代码的情况下将函数名列表添加到QStringList。为什么用户需要在运行时知道类的所有成员函数的名称?这听起来像应该在类文档中的某个地方…我明白了。我可以像代码一样使用此代码。我对自动方法感兴趣,因为如果我添加10个函数,但忘记将其添加到selfFunctionList列表中,则会导致错误。此外,如果我从代码中删除函数,并且忘记从selfFunctionList中删除函数,则它也会很糟糕。以防万一,需要它要覆盖人类因素,所以没有办法使它自动化。@ Enor不在C++程序本身中。你可以写一个程序,读取你的<代码> .h /Cord>文件并提取函数名,然后自动生成你需要的文件,这些代码甚至C++,比你想象的难。特别是如果你在
.h
文件中使用了一个特征命名约定。谢谢你的回答。我思考这个问题是因为我发现了这个问题,我只是想知道有没有办法获得当前类的所有函数。@伊霍感谢你的引用,我以前从未查看过这些宏。但是它们只打印这些宏的名称正在执行的函数,因此如果不编写远远超过只需按下名称所需的代码,就无法使用它们——在每个函数中,您需要一个func调用,然后您需要实际调用该函数,在列表中按下名称,但只在第一次调用时,所以您需要一个局部静态变量……等等。太好了!这就是我需要的。非常感谢!@IGHOR你看这部分对吗?“一个条件,函数需要声明为插槽或信号。”正如我在回答中所说,Qt的moc在一般情况下没有帮助。我需要的功能已经是插槽了。我没有提到它,因为我认为解决我的问题不需要这些信息:)。这个回答100%解决了我的问题。@IGHOR这个信息是解决你的问题所需要的,因为关于信号和插槽的信息不是由C++编译器收集的,而是由Qt附带的 MOC < /Cult>代码生成器。它是 MOC < /Cord>读取源文件并生成描述类中可调用方法的元数据。它添加了C++标准中其他缺失的反射数据。当然,我现在明白了。有C++解决方案,但是QT对我也很好。
("destroyed","destroyed","objectNameChanged","deleteLater","_q_reregisterTimers",
"testSignal","privateTestFunction","publicTestFunction")