考虑以下代码:
struct A {};
struct B : A {};
bool f(A,A) { /* ... */ }
bool f(B,B) { /* ... */ }
现在假设我有类似
的地方 // ...
b = f(x,y);
// ...
我想通过(可能是编译时或运行时)单元测试确保此代码序列调用f
的特定重载。假设f(B,B)
是f(A,A)
的一些专门的优化版本,因此它在功能上是等效的,但速度更快。我只能通过查看结果来确定调用了哪个函数。
当然,一种可能性是让f
设置一些全局标志。
另一种可能性就像是
template <class X, class Res> struct Distinguish {
using Tag = X;
Res m_res;
explicit Distinguish (Res res) : m_res (res) { }
operator Res () const { return m_res; }
};
Distinguish<char[1], bool> f (A, A) { /* ... */ }
Distinguish<char[2], bool> f (B, B) { /* ... */ }
然后检查decltype(f (x,y))::Tag
。然而这很难看,因为我必须改变f
的签名。
还有更好的方法吗?
答案 0 :(得分:0)
在调试器中执行它。您可能必须在函数定义中的大括号之前放置回车符。