可以编译器告诉我它选择的哪个超载或模板功能
can compiler tell me which overloaded or template function it chose?
专门在Linux上使用G ,是否有一种方法可以确定用于特定语句的哪个超载或模板函数?
更具体地说,我不认为我一定知道所有可能的选择,这些选择可能来自来自各个库的标题文件。即使我这样做,我也不认为我可以修改相关代码。
我不知道直接执行此操作的方法。
最简单的解决方案是在呼叫站点上设置一个断点,然后将单步设置为所谓的任何函数。然后您的调试器可以告诉您您的功能。
像Eclipse CDT这样的IDE可以进行超载和模板分辨率本身(如果一切正常),因此右键单击函数调用并转到函数声明将带您进入适当的函数。
通过故意创建一个模棱两可的函数调用,如本答案中所述,您可以获取所有可用的过载和模板的列表,并且可以弄清楚从那里调用了哪个。
正如Matthieu M.所说,Clang可以抛弃其AST。这需要一些解释,但是它可以帮助您弄清楚被调用的功能。
部分答案。
您可以在运行时使用非标准宏来打印函数名称(可用于打印方法名称的宏/关键字?
GNU C :
#include <iostream>
using namespace std;
template <typename T>
void f(const T & t)
{
cout << __PRETTY_FUNCTION__ << endl;
}
void f(const string &)
{
cout << __PRETTY_FUNCTION__ << endl;
}
void f(int)
{
cout << __PRETTY_FUNCTION__ << endl;
}
int main()
{
f(1.0);
f(1);
f(string("sss"));
string a;
f(a);
}
此代码输出(http://ideone.com/pi39qk):
void f(int)
void f(int)
void f(const std::string&)
void f(T&) [with T = std::string]
相关文章:
- 如果我具有调用其其他实例之一的超载函数,它是否被认为是递归功能
- 超载类成员功能标记为const
- 超载分辨率在模板实例化点后找到功能
- 构造函数超载以接受任何功能
- 界面设计:超载功能的安全性采用字符串和字符阵列
- Python C API-返回功能超载中的不同类型
- 模棱两可的功能超载[例如最大限度()]
- 找不到超载的成员功能,类位于标题中
- 如何使用模板函数参数编写包装函数,该功能可以采用超载的成员函数
- BOOST-ASIO ASYNC_RECEIVE_FROM功能超载问题( 动态指针)
- 功能模板超载分辨率在Visual C 2017中失败
- 将超载函数指针作为参数传递到过载模板功能
- 编译器如何区分超载功能
- C 17带有运营商超载功能的评估顺序
- 超载功能没有上下文类型信息
- 为模棱两可的超载功能调用创建默认值
- 超载功能运算符
- 超载功能中的错误
- STD ::绑定和超载功能
- 超载功能错误消息