【发布时间】:2015-11-09 12:17:26
【问题描述】:
是否可以在编译时检查属于两个不同类的两个构造函数是否具有相同的签名? 如果可以,如何实现?
例子:
struct A
{
A(int){}
};
struct B
{
B(int){}
};
int main()
{
static_assert(std::same_signature< A::A , B::B >::value, "A and B must have the same constructor parameters");
return 0;
}
【问题讨论】:
-
请提供一些示例代码。你会如何使用这样的特质?
-
尝试使用
decltype和the type support functions 可能会奏效。 -
你想如何处理默认参数?
-
您永远无法获得该用法语法(也无法添加
&),因为构造函数没有名称(12.1 的第一句)。在 C++ 中,无论您在哪里命名构造函数,它实际上都是语法的一种特殊构造。没有这样的构造用于从构造函数创建指针或对成员函数的引用。 -
现在,这并不能立即排除语法
same_constructor_signatures< A, B >::value...但是当您只有 SFINAE、没有指向成员函数的指针、没有类型时,检查签名非常困难推理或模板推导。
标签: c++ constructor compile-time