小编rsa*_*xvc的帖子

类静态成员数组的范围 static_assert

我想使用 来强制执行关于类静态成员变量数组长度的编译时约束static_assert()。但是,命名变量的长度lpfilter[]在标头的声明中未知,只有在稍后的定义中才知道。我不确定如何最好地实现它,static_assert以便它可以看到静态私有数组长度。我有一个解决方法,使用私有作用域函数来保存static_asserts,但是有更好的方法吗?我在 C++14 模式下使用 clang 15。

//in header
class test
{ 
private:
    //member constants
    static const float lpfilter[];

    //feels like a workaround
    void testChecker(void);
};
Run Code Online (Sandbox Code Playgroud)
//early in cpp file
const float test::lpfilter[] = {
    #include "a_single_line_lpfilter.csv"
};
Run Code Online (Sandbox Code Playgroud)

到目前为止我已经做了一些尝试。每个构建错误都是有意义的:

//after lpfilter[] definition in cpp file

//error: 'lpfilter' is a private member of 'test'
static_assert((sizeof(test::lpfilter)/sizeof(test::lpfilter[0])) % 2, "filter length must be even");

//error: redefinition of 'test'
class test
{
static_assert((sizeof(test::lpfilter)/sizeof(test::lpfilter[0])) % 2, "filter length …
Run Code Online (Sandbox Code Playgroud)

c++

6
推荐指数
0
解决办法
67
查看次数

标签 统计

c++ ×1