我想使用 来强制执行关于类静态成员变量数组长度的编译时约束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++ ×1