c++ - 如何断点多个 C++ 模板方法,就像非模板一样?

标签 c++ debugging gdb

如果我这样做:

(gdb) b nmspace::TestClass::compareFOO

然后下面的方法签名将作为一个断点被签名:

nmspace::TestClass::compareFOO(blah::Foo const&, blah::Foo const&, unsigned int)
nmspace::TestClass::compareFOO(blah::Foo const&, blah::FooField const&, unsigned int)
nmspace::TestClass::compareFOO(blah::FooField const&, blah::Foo const&, unsigned int)
nmspace::TestClass::compareFOO(blah::FooField const&, blah::FooField const&, unsigned int)

是不是有类似下面的,或者说模板方法每次都要写这四个?多态性不也适用于C++模板吗?

nmspace::TestClass::compareFOOES<blah::Foo, blah::Foo>
nmspace::TestClass::compareFOOES<blah::Foo, blah::FooField>
nmspace::TestClass::compareFOOES<blah::FooField, blah::Foo>
nmspace::TestClass::compareFOOES<blah::FooField, blah::FooField>

我试过了 nmspace::TestClass::compareFOOES , nmspace::TestClass::compareFOOES* , nmspace::TestClass::compareFOOES<>()

最佳答案

如果所有函数的主体都相同,您可以使用 std::enable_ifboost::enable_if 编写一个可以接受多种类型参数的全局函数:

template< class T >
struct is_valid_field
    : boost::or_<boost::is_same<T, blah::Foo>, boost::is_same<T, blah::FooField>>
{
};

template< class T, class Q >
nmspace::TestClass::compareFOO(T const&, Q const&, unsigned int,
    typename boost::enable_if<
        boost::and_<is_valid_field<T>, is_valid_field<Q>
    >::type* = 0)
{
    // implementation
}

关于c++ - 如何断点多个 C++ 模板方法,就像非模板一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13995721/

相关文章:

c++ - 将字符串函数复制到非 const char 缓冲区

c++ - 构造局部对象——常量引用

c - 在控制台模式下更改/过滤 GDB 输出

c++ - 循环重复而不再次提示用户?

C++ - 互斥锁和自旋锁的初始化和销毁

java - 为什么 log4j 消息没有显示在控制台中?

android - 使用 Eclipse "Play"按钮调试游戏服务

c - 每次调试时变量的地址都会改变吗

c++ - 使用 Eclipse gdb DSF 调试的相对路径上的 Xml 解析异常

c - GDB 在进入断点时抛出错误