【发布时间】:2021-10-28 20:12:53
【问题描述】:
假设我有一些复杂的模板函数,我想测试它是否按预期工作。 特别是当使用某些参数调用时,该函数类型仅由第一个参数确定。 对于example:
template<typename T>
bool less(const T& x, const std::type_identity_t<T>& y){
return x < y;
}
在这里,我想检查一下(使用static_assert 或某些测试框架期望),只有第一个参数决定了函数的签名,例如:
std::is_same_v<decltype(less(short{1}, long{2})) , decltype(less(short{1}, double{2}))>;
但显然这不起作用,因为 decltype 会给我函数调用的结果,而不是当我给它我给它的参数时实例化的函数的类型。
有没有办法做到这一点(假设我不能修改函数,例如,用 typedefed T 使其成为仿函数或以任何其他方式更改它)?
我试图搜索这个,失败了,我想有人已经问过这个但我找不到问题。
注意:我知道测试行为,而不是实现。例子只是小例子,不现实。
【问题讨论】:
-
您可以从 C++ 外部执行此操作:stackoverflow.com/questions/20092672/…
-
似乎唯一的方法是为每个被测试者函数专门化测试器,因为我们无法得到推导的模板类型stackoverflow.com/questions/18369128/…
标签: c++ templates c++20 decltype