作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 static_assert 对我的类的配置实现各种限制。早些时候,我只使用一个枚举,并且只允许一个需要所述枚举的构造函数来对我的类实现限制。如果我有类似下面的内容并且范围是从 0 到 4,这很好用,但是一旦我有 0 到 500 的范围,那么使用枚举就变得笨拙了。
一些类.h
class Some_Class {
public:
Some_Class(const unsigned int param);
private:
const unsigned int member_param;
};
Some_Class.cpp
Some_Class::Some_Class(const unsigned int param) : member_param(param) {
static_assert(member_param < 500, "Param must be less than 500.");
};
main.cpp
Some_Class foo4(125); // OK
Some_Class foo5(500); // Should fail at compile time.
这是 GCC 在使用 C++14 编译时抛给我的:
1> Some_Class.cpp: In constructor 'Some_Class::Some_Class(unsigned int)':
1>C:\some_path\Some_Class.cpp(3,2): error : non-constant condition for static assertion
1> static_assert(member_param < 500, "Param must be less than 500.");
1> ^
1>C:\some_path\Some_Class.cpp(3,2): error : use of 'this' in a constant expression
最佳答案
constexpr 中不能使用参数值。
你必须以某种方式提交编译时值:
为您的整个类(class)制作模板:
template<unsigned int size>
class Some_Class {
static_assert(size < 500, "Size should be less than 500");
public:
constexpr unsigned int member_param = size;
};
传递一个 integral_constant:
template <unsigned int N>
using uint_c = std::integral_constant<unsigned int, N>;
class Some_Class {
public:
template<unsigned int size>
Some_Class(uint_c<size>) : member_param(size)
{
static_assert(size < 500, "Size should be less than 500");
}
private:
unsigned int member_param;
};
关于c++ - 如何使用与成员初始值设定项列表一起使用的 static_assert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33930464/
我想成为 Spark 纱客户(link)。是否需要安装hadoop?还是只安装 yarn 可以吗? (by this link) 最佳答案 No Spark不需要Hadoop即可运行。 Apache
我是一名优秀的程序员,十分优秀!