当前位置:  开发笔记 > 编程语言 > 正文

有没有办法在编译时检查std :: initializer_list参数的数量?

如何解决《有没有办法在编译时检查std::initializer_list参数的数量?》经验,为你挑选了1个好方法。

我正在尝试创建一个接受给定类型的几个参数的函数,但是应该通过模板指定参数的类型和数量.

我发现在这种情况下使用C++ 11的initializer_list可能是一个很好的技术,但是有可能在编译时检查它的大小吗?还有其他技术可以解决这个问题吗?

#include 

// Here I want to define type and number of components for each point

template 
class Geometry
{
public:
    void addPoint(std::initializer_list 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.. 6

您无法静态断言运行时数量.并且a的值的数量initializer_list在运行时由函数的调用者决定.

甚至不能使您的功能constexpr起作用,因为不需要在编译时对函数进行评估.

您应该使用可变参数模板.



1> Nicol Bolas..:

您无法静态断言运行时数量.并且a的值的数量initializer_list在运行时由函数的调用者决定.

甚至不能使您的功能constexpr起作用,因为不需要在编译时对函数进行评估.

您应该使用可变参数模板.

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有