有没有一种方法可以在编译时检查std :: initializer_list参数的数量?

德米特里·舒洛夫(Dmitry Shurov)

我正在尝试创建一个可以接受给定类型的多个参数的函数,但是参数的类型和数量均应通过模板指定。

我发现在这种情况下,使用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"); 
    }
};
尼科尔·波拉斯(Nicol Bolas)

您不能对运行时数量进行静态声明。而其中的值数initializer_list则是在运行时由函数的调用者确定的。

甚至使您的函数constexpr都行不通,因为不需要在编译时对函数进行评估。

您应该改用可变参数模板。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有一种方法可以在编译时检测是否可以使用给定的一组参数类型成功调用通用lambda?

有没有一种方法可以从Rust编译器获取淘汰的生存期参数?

有没有一种方法可以返回没有String []参数的数组?

有没有一种方法可以保存带有参数的函数调用?

有没有一种方法可以评估B +树所需的叶子数量?

有没有一种方法可以更新ConcurrentMessageListenerContainer中的并发数量?

有没有一种方法可以动态确定cuda流的数量?

有没有一种方法可以转换为闭包的参数?

有没有一种方法可以参数化云形成资源名称?

有没有一种方法可以根据参数更改LINQ查询orderBy?

有没有一种方法可以将通用参数限制为数组?

有没有一种方法可以自动填充参数名称?

有没有一种方法可以重用fmt.Printf中的参数?

有没有一种方法可以转换类型参数?

有没有一种方法可以自动对齐函数参数?

有没有一种方法可以将列名指定为参数?

有没有一种方法可以通过使用参数来选择几行?

有没有一种方法可以在@Path批注中指定查询参数?

有没有一种方法可以确定dd的bs参数的最优值?

有没有一种方法可以设置Calabash触摸或查询的参数

有没有一种方法可以基于命令行参数来定义数组大小?运行时间与编译时间实例化?

有没有一种方法可以使构造函数接受两种可能的参数类型?

有没有一种方法可以在使用控制器方法之前检查控制器参数?

有没有一种方法可以通过php函数传递多个有限数量的数组?

有没有一种方法可以计算出一定数量?

有没有一种方法可以检查是否在编译时声明了变量?

有没有一种方法可以通过与Scala中的Array元素进行检查来过滤出List的元素?

有没有一种方法可以使用对象及其非空参数列表调用运算符生成std :: thread?

有没有一种方法可以将列表作为argparse中的参数之一传递