可以提供无法推断的模板化构造函数模板参数:
struct X
{
int i;
template<int N>
X() : i(N)
{
}
};
你会如何使用这样的构造函数?你能用它吗?
答案 0 :(得分:3)
不,你can't specify constructor template arguments。有几种选择。
std::integral_constant
参数,当作为参数传递时,将推导出N
:代码:
#include <cassert>
#include <type_traits>
struct X
{
int i;
template<int N>
X(std::integral_constant<int, N>) : i(N)
{
}
};
int main()
{
std::integral_constant<int, 6> six;
X x(six);
assert(x.i == 6);
}
make_X<N>
样板的专用integral_constant
模板包装器:代码:
template<int N>
X make_X()
{
return X(std::integral_constant<int, N>{});
}
int main()
{
auto y = make_X<42>();
assert(y.i == 42);
}