【发布时间】:2018-01-22 12:44:39
【问题描述】:
检查在两个不同类中定义的两个方法的签名是否完全相同的最优雅的方式(可能是 C++17 方式)是什么?
例如:
template< typename ...Ts >
struct A
{
void f(Ts...);
};
template< typename ...Ts >
struct B
{
void g(Ts...);
};
static_assert(has_same_signatures< decltype(&A<>::f), decltype(&B<>::g) >{});
static_assert(!has_same_signatures< decltype(&A< int >::f), decltype(&B< char >::g) >{});
//static_assert(has_same_signatures< decltype(&A< void >::f), decltype(&B<>::g) >{}); // don't know is it feasible w/o extra complexity
如果两边的非成员函数类型也允许的话,那就太好了。
也许结果类型也应该被纠缠。
任务源于Qt框架中匹配信号/槽签名的常见问题。
【问题讨论】:
-
@Barry 不要认为,需要和号。您是否认为对函数的引用不够好?
-
没有
&就不能引用非静态成员函数。
标签: c++ qt metaprogramming c++17 typetraits