我正在使用__func__
作为参数之一来调用函数,因此我可以存储调用该函数的函数的名称,而不必重新键入调用函数的名称。
有没有办法获取调用函数的地址-一种getaddress(__func __)
?
答案 0 :(得分:0)
地址不会告诉您太多;我可以建议使用预定义的宏__FILE__
和__LINE__
吗?他们会告诉您当前的源文件(作为char*
)和当前行。当您调用将那些参数作为参数传递的函数时,您会知道函数是从哪个文件/行调用的。
它们在使用时由编译器评估。如果您在函数内使用它们而不是将它们作为参数传递,它们会告诉您函数本身的文件/行。
答案 1 :(得分:0)
您可以声明函数指针,然后为它们分配特定的函数。这样一来,您就可以拥有表的指针数组或其他集合。
如果这对您有用,并且您接受了答案,那么我愿意在这里创建一个简短的摘要。 (我知道我不应该只用链接来回答。)但是,看看这种方法是否可以满足您的要求。 https://www.learncpp.com/cpp-tutorial/78-function-pointers/
答案 2 :(得分:0)
没有可移植的标准C ++方法来执行此操作。您可以使用编译器/ OS特有的技巧,与as in C相同,但是在C ++中它用处不大,因为它仅适用于extern "C"
个名称(其中__FUNCTION__
/ __func__
匹配dlsym
的期望)。
由于hack仅适用于extern "C"
名称,这意味着您不能将其用于模板化函数,类方法或函数重载(相同的函数名称,不同的参数原型),这是相当严格的。请注意,即使在某些情况下,即使输入函数名称也已不起作用(例如,仅名称不能描述原型,因此函数重载将不起作用)。
我认为您需要重新考虑本质上要求reflection in C++的设计;优化编译器的本质是,您定义的大多数函数实际上不一定必须存在,或者如果确实存在,则它们仅以对编译器无意义的名称存在。当您要求从函数内部动态确定当前函数的地址时,您假设该函数以实际地址存在于最终编译的二进制文件中,此时可以很容易地将其内联到每个实际的调用站点中,与几乎相同的功能部分合并,等等。