编写一个只使用编译时常量参数的函数
Writing a function which only takes compile-time constant parameters?
C++中有没有一种方法可以编写一个函数,该函数可以将编译时常数作为参数,但如果您传递一个依赖于运行时的值,则会产生编译错误?具体来说,我有一个构造函数,其中用空指针初始化会有一个可接受的行为,但用非空指针初始化意味着发生了一些奇怪的事情
细节,如果它们很重要的话:类可以用智能指针构造,但不应该用(非null)原始指针构造。为了简洁起见,我希望能够直接从空指针文本进行初始化,但智能指针不允许从原始指针进行隐式转换。这意味着在每个使用点都需要额外的措辞来显式地将空指针封装在智能指针中。通过将包装移到构造函数中来消除重复代码会很好。
我知道这样做的一种方法是使用运行时检查传递的参数是否为非null,但如果可能的话,我更喜欢在编译时捕获一般的原始指针转换,并且只允许在原始指针绝对为null时进行编译。
(请务必提及您的技术是否依赖于C++11或C++14功能。)
由于C++11,您可以使用std::nullptr_t
来满足您的需要。
演示。
相关文章:
- C++常量数组的编译时间较长
- 在编译时将常量字符* 转换为常量 char_type*
- 将编译时常量向量转换为堆分配版本
- 如何在常量计算表达式中获取编译时错误?
- 如何在编译时解析静态常量 std::string?
- 有没有办法在类实例中存储编译时常量?
- 检测编译时文本和常量
- ARM C++编译器不会编译具有可变常量成员的结构
- 强制在编译时计算类的类的常量成员
- Constexpr 类采用常量引用不编译
- 为什么对数组的常量左值引用不编译在下面?
- 由于缺少常量而出现编译错误
- 为什么在将常量 ptr 分配给常量引用时没有收到编译错误?
- 为什么可以在编译时访问非常量、非静态成员而无需类的实例
- 不是 VS2017 中的编译时常量表达式
- 将编译时定义大小的数组初始化为常量表达式
- 将大小为编译时常量的数组初始化为单个值
- 如何为 std::array 声明全局编译时常量?
- 返回非常量引用编译的 Const 方法
- 常量正确性编译错误到模板函数中的无效转换错误