这是一个有点离奇的问题.我的目标是理解语言设计决策并确定C++中反射的可能性.
为什么C++语言委员会不会在语言中实现反思?对于不在虚拟机上运行的语言(如java),反射是否太难?
如果要实现C++的反射,那么挑战是什么?
我想反射的使用是众所周知的:编辑器可以更容易编写,程序代码更小,可以为单元测试生成模拟等等.但是,如果你也可以对反射的使用发表评论,那就太棒了.
我希望能够内省一个C++类的名称,内容(即成员及其类型)等.我在这里说的是原生C++,而不是托管C++,它有反射.我意识到C++使用RTTI提供一些有限的信息.哪些额外的库(或其他技术)可以提供此信息?
我有一个指向函数的指针,假设有任何签名.我有5个不同的功能和相同的签名.
在运行时,其中一个被分配给指针,并调用该函数.
如果不在这些函数中插入任何print语句,我怎样才能知道指针当前指向的函数名称?
好吧,所以标题糟透了,但我想不出更好的东西(也许其他人可以?).
所以我在这里围绕一个主题提出几个问题.我想要做的是创建一个程序,可以获取一个对象并使用反射列出它的所有属性,方法,构造函数等.然后我可以在运行时操作这些对象来测试,调试和弄清楚我的一些类/程序在运行时正在进行,(其中一些将是Windows服务,可能安装在机器上而不是从VS运行调试).
所以我会为程序提供一个钩子,从本地机器(仅)这个程序可以获得主对象的实例,因此可以看到在其中运行的所有子对象.(为了安全起见,程序可能需要使用arg来启动以暴露该钩子).
"反射机器"将允许运行时操作和询问.
听起来有可能吗?
程序是否必须提供一个钩子,或者"反射机器"是否可以使用EXE并且(如果它知道它正在使用的所有类),创建一个要使用的对象?
我知道你可以在运行时导入DLL,以便它知道各种类,但是你可以导入单个类吗?IE说我有没有编译成DLL的项目'Y'但是我想在它上面使用"反射机器",我可以指向该目录并获取文件以便能够引用这些类吗?
编辑:我想尝试自己开发它,但我已经有一长串项目,我想做,已经开始.当有很多可供选择的选择时,为什么要重新发明轮子.
当我读到K&R的C编程语言第176页时,我非常兴奋.我找到了struct FILE的所有成员(我正在搜索),并且知道事情是如何工作的真棒.但猜猜是什么,gcc抱怨,错误:'FILE'没有名为'fd'的成员.这意味着现在情况发生了变化,我用Google搜索但找不到.请帮助,提前谢谢.
我可以使用fileno()来获取文件描述符,但我讨厌在抽象级别上工作.
int
main ( int argc, char **argv ){
    FILE *fp = fopen ("ct.c", "r");
    printf ("%i", fp->fd);
    return 0;
}
我在C中有几个结构,我想写下以下三个函数:
get_field_list(...)
get_value_by_name(...)
set_value_by_name(...)
第一个应返回结构中定义的字段列表.第二个和第三个应该通过它的名称获取并设置到适当的字段.
我正在写结构.如果需要,我愿意使用任何宏魔法.如果生病每个结构都有三重函数,那就没关系,但通用结构更好.功能指针也很好......
基本上我想要结构的一些基本反思....
Relevent:https: //natecraun.net/articles/struct-iteration-through-abuse-of-the-c-preprocessor.html
我正在尝试为用C编写的本机应用程序构建DAL(数据访问层).我使用SQLite作为数据库.我需要存储各种结构,并且能够插入\ update\get(按键选择)\ search(按查询选择),还可以创建\ drop所需的表.
基本上我想要像Hibernate for C ...
到目前为止,我最好的想法是使用MACRO或一些代码生成实用程序或脚本来创建我的结构以及可用于动态构建所有SQL命令的元数据.还有一个小的"通用"模块来实现我需要的所有基本程序......
不同或更好的想法来解决我的实际问题也将不胜感激!
是否可以在 C 程序中在运行时知道函数参数和变量的名称类型?例如,如果我有一个函数:
int abc(int x, float y , somestruct z ){
    char a;
    int b ;
}
我可以知道在这个函数内部abc(),参数和变量的名称是什么,即在这种情况下它的x, y, z, a,b它们的类型是int, float, somestruct, char, int。
说是否还有另一个功能:
float some_func(specialstruct my_struct, int index){
} 
我应该知道参数 name 是my_struct,index类型是specialstruct, int。
我在运行时需要这些信息?
我可以访问基指针和返回地址,是否可以使用上述指针获取所需信息。
我能够使用返回地址和dladdr()函数提取函数名称。
我明白了GDB,所以应该可以提取这些信息?
如何将字符串转换为变量名?我有一个字符串列表:
     "str1", "str2", "str3", etc.
和一个结构:
struct my_struct {  
       int str1;  
       int str2;  
       int str3;  
} m = {5, 10, 15, ... etc};  
给定一个字符串"str2",我想打印与该名称相关的变量m.str2.C有什么办法吗?
谢谢!
例如:就像我有一个变量char str[3]="abc";那么我可以使用这个"abc"作为另一个变量的名称(比如一个整数),这样我就可以存储任何值abc.如果是,那么在这样存储'abc'中的值时:
 int abc=123;
我可以通过引用来将abc称为变量str吗?
例如我有这 3 个函数和函数指针:
char *(*f)(char, int);
char *(*g(char, int));
char **h(char, int);
如果我们将它们翻译成英文,我们会得到:
将 f 声明为指向函数 (char, int) 的指针,返回指向 char 的指针
将 g 声明为函数 (char, int) 返回指向 char 的指针
将 h 声明为函数 (char, int) 返回指向 char 的指针
类型 2. 和类型 3. 是相等的。我们可以检查一下吗,也许是这样的:
if(g==h)
{
    do something;
}
在c中?
c 也允许类似的东西吗g=h?(如果是,它实际上是做什么的?)
我们如何在输出中打印最年轻的名字?我想计算最年轻的人.
那是我的代码:
    #include <stdio.h>
    #include <conio.h>
    int main() {
    int john;
    int ahmad;
    int saleem;
    printf("Enter the age of john,ahamd, saleem simaltanoeusly\n");
    scanf_s("%d\n%d\n%d", &john, &ahmad, &saleem);
    int youngest = john;
    if (john > ahmad) 
        youngest = ahmad;
    if (ahmad > saleem)
        youngest = saleem;
    printf("youngest of you is %d", youngest);
    _getch();
    return 0;
}