C++ 如何在构造函数上指定不可推断的模板参数?
可以提供无法推导的模板化构造函数模板参数:C++ 如何在构造函数上指定不可推断的模板参数?,c++,templates,C++,Templates,可以提供无法推导的模板化构造函数模板参数: struct X { int i; template<int N> X() : i(N) { } }; struct X { int i; 模板 X():i(N) { } }; 您将如何使用这样的构造函数?你能用它吗?不,你能用。有几种选择 如@KerrekSB的注释所示,您可以为构造函数模板提供一个std::integral_常量参数,当作为参数传递时,将推断N: 代码: 你不能。由于构造函数
struct X
{
int i;
template<int N>
X() : i(N)
{
}
};
struct X
{
int i;
模板
X():i(N)
{
}
};
您将如何使用这样的构造函数?你能用它吗?不,你能用。有几种选择
std::integral_常量
参数,当作为参数传递时,将推断N
:你不能。由于构造函数没有名称,所以不能指定构造函数模板的模板参数。所有模板参数都必须是可推断的。当然,您可以通过其他方式实现编译时常量表达式初始化,例如使用
std::integral_constant
参数等进行标记分派。您的用例是什么?@DieterLücking,我会将其与类型一起用于包装对象的分配。我使用了一个函数,类似于make_unique
。
#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);
}
template<int N>
X make_X()
{
return X(std::integral_constant<int, N>{});
}
int main()
{
auto y = make_X<42>();
assert(y.i == 42);
}