我正在尝试创建一个可以接受给定类型的多个参数的函数,但是参数的类型和数量均应通过模板指定。
我发现在这种情况下,使用C ++ 11的initializer_list可能是一种不错的技术,但是可以在编译时检查其大小吗?还有其他技术可以解决此问题吗?
#include <initializer_list>
// Here I want to define type and number of components for each point
template <typename T, int DIM>
class Geometry
{
public:
void addPoint(std::initializer_list<T> coords)
{
assert(coords.size() == DIM); // Working good, but not compile-time
// Next line does not compile because size() is not known at compile-time
static_assert(coords.size() == DIM, "Wrong number of components");
}
};
您不能对运行时数量进行静态声明。而其中的值数initializer_list
则是在运行时由函数的调用者确定的。
甚至使您的函数constexpr
都行不通,因为不需要在编译时对函数进行评估。
您应该改用可变参数模板。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句