C++ 是否可以在C+;中获取对象的包含文件的名称+;?

C++ 是否可以在C+;中获取对象的包含文件的名称+;?,c++,C++,我需要从类中实例化一个对象,比如说Cat,并知道它包含的文件的名称 主程序应如下所示: #include <iostream> #include <vector> #include "Cat.h" using namespace std; vector<string> getIncludes(Cat cat){ ... } int main(int argc, char *argv[])

我需要从类中实例化一个对象,比如说Cat,并知道它包含的文件的名称

主程序应如下所示:

    #include <iostream>
    #include <vector>
    #include "Cat.h"

    using namespace std;

    vector<string> getIncludes(Cat cat){
      ...
    }

    int main(int argc, char *argv[])
    {
      Cat cat;
      std::vector<string>list = getIncludes(cat);
    }
    #include "utils.h"
    #include "animals.h"

    class Cat{
    public:
      Cat();
      ~Cat();
      void meow();
    private:
      int age;
    }
调用
std::vector list=getIncludes(cat)
后,
list
应包含
“utils.h”
“animals.h”


如果有其他方法可以在主函数中获得这些名称,我愿意接受建议。提前感谢。

不,这是不可能的,信息在运行时将不再显示

预处理器只是在编译时将
utils.h
animals.h
的内容替换到
#include
语句出现的地方


若您需要这样一个列表来检测重新编译代码的依赖关系,大多数编译器都可以在翻译单元中生成一个包含头的列表

下面是一些如何执行此操作的进一步信息:


这听起来像是一个错误。你到底想做什么?为什么需要包含文件的名称?我认为您试图解决错误的问题(或者,至少,以错误的方式)。类的实例不“包含”任何内容。实例在运行时存在,预处理器指令甚至在编译之前就存在。不,这是不可能的。@sircodesalot
#include
指令是针对预处理器的,而不是针对编译器的ῥεῖ 我将了解如何从编译器中获取信息。@Camilo您可能应该在问题中解释需要您这样做的实际用例。这听起来真的像第一条评论中提到的XY问题。我想这是XY问题。我的用例如下:我有一个具有实现某些接口的私有属性的类(例如:实现CatInterface的Cat),由于我无法访问这些属性,也不知道这些类将实现哪些接口,我想我可以使用Cat的头文件来知道它包含哪些接口。@Camilo以及列出包含文件如何帮助访问私有属性?我认为您应该查找动态多态性,以及如何设计
Animal
接口@πάντα ῥεῖ 我不需要访问私有属性,只知道它们使用的是什么接口