是否可以限制可变参数构造函数中的参数类型?
我想能够表达
X x1(1,3,4);
X x2(3,4,5);
// syntax error: identifier 'Args'
class X {
template<int ... Args> X(Args...)
{
}
};
// this works but allows other types than int
class Y {
template<typename ... Args> Y(Args...)
{
}
};
编辑以澄清意图:
我要实现的是将传递给构造函数的数据(在编译时已知的常数)存储到静态数组中。
所以还有其他一些
template<int ...values>
struct Z
{
static int data[sizeof...(values)];
};
template<int ... values>
int Z<values...>::data[sizeof...(values)] = {values...};
并且在XI的构造函数中想像这样使用Z:
class X {
template<int ... Args> X(Args...)
{
Z<Args...>::data // do stuff with data
}
};
那有可能吗,我们必须使用integer_sequence吗?
由于您具有以下条件:
template<int... values>
struct Z
{
static int data[ sizeof...( values ) ];
};
template <int... values>
int Z<values...>::data[ sizeof...( values ) ] = { values... };
您可以std::integer_sequence<>
用来将int传递给Z<>
:
struct X
{
template <int... values>
X( std::integer_sequence<int, values...> )
{
for ( int i{ 0 }; i < sizeof...( values ); ++i )
Z<values...>::data[ i ]; // do stuff with data
}
};
您可以使自己成为帮助者类型,以便轻松调用ctor:
template <int... values>
using int_sequence = std::integer_sequence<int, values...>;
然后,您可以像这样实例化您的课程:
int main()
{
X x( int_sequence<1, 3, 5>{} );
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句