C++ 如何在gdb中调用模板成员函数?
我试图在右值引用的gdb(我想是7.6.1版)中打印模板成员函数的返回值,因此我在gdb中编写的内容大致如下:C++ 如何在gdb中调用模板成员函数?,c++,gdb,C++,Gdb,我试图在右值引用的gdb(我想是7.6.1版)中打印模板成员函数的返回值,因此我在gdb中编写的内容大致如下: gdb> print (*(TypeOne*)var).get<TypeTwo>() gdb>print(*(TypeOne*)var.get() 我试着在表达式的各个部分插入括号,但没有成功,我也找不到关于这个问题的任何其他问题。有人知道吗?从这篇相关文章开始: 我能够在我自己的程序中解决这个问题。 我没有使用右值或变体,所以它可能不适用于这个问题,但我认为它仍
gdb> print (*(TypeOne*)var).get<TypeTwo>()
gdb>print(*(TypeOne*)var.get()
我试着在表达式的各个部分插入括号,但没有成功,我也找不到关于这个问题的任何其他问题。有人知道吗?从这篇相关文章开始: 我能够在我自己的程序中解决这个问题。 我没有使用右值或变体,所以它可能不适用于这个问题,但我认为它仍然与这个问题相关 我的用例是一个使用单个枚举作为模板参数的方法,类似于:
#include <stdio.h>
enum class MyEnum {
VALUE_0 = 0,
VALUE_1 = 1
};
struct TestStruct {
template <MyEnum VALUE>
int getValue() {
if constexpr (VALUE == MyEnum::VALUE_0) {
return value_0;
} else /* VALUE == MyEnum::VALUE_1 */ {
return value_1;
}
}
const int value_0 = 7;
const int value_1 = 9;
};
int main()
{
TestStruct test;
test.template getValue<MyEnum::VALUE_0>();
test.template getValue<MyEnum::VALUE_1>();
return 0;
}
如果要调用此方法:
int getValue<(MyEnum)1>(void);
int-getValue(void);
我们可以使用单引号中所示的名称来调用它
(gdb) p test.'getValue<(MyEnum)1>'()
$1 = 9
(gdb)p测试'getValue'()
$1 = 9
您可以在这里尝试:
另一个线程的注释:
如果源代码中没有显式实例,编译器会将模板代码视为“静态内联”代码,并在未使用时对其进行优化
因此,您必须在代码中的某个地方调用该方法才能在gdb中调用它,否则将无法工作。TypeOne是std::variant成员的包装器,get函数只调用该成员上的std::get。如何使用std::variant成员实现这一点?当然,您应该能够在gdb中调用函数,您可以调用函数(尽管有很多警告),但是模板是有问题的,使用普通模板函数,您必须将其包含在单引号中,我想,虽然我绝对不是gdb高手…安可能会更快地给你答案。可能是重复的
(gdb) p test.'getValue<(MyEnum)1>'()
$1 = 9