编写一个只使用编译时常量参数的函数

Writing a function which only takes compile-time constant parameters?

本文关键字:编译 常量 参数 函数 一个      更新时间:2023-10-16

C++中有没有一种方法可以编写一个函数,该函数可以将编译时常数作为参数,但如果您传递一个依赖于运行时的值,则会产生编译错误?具体来说,我有一个构造函数,其中用空指针初始化会有一个可接受的行为,但用非空指针初始化意味着发生了一些奇怪的事情

细节,如果它们很重要的话:类可以用智能指针构造,但不应该用(非null)原始指针构造。为了简洁起见,我希望能够直接从空指针文本进行初始化,但智能指针不允许从原始指针进行隐式转换。这意味着在每个使用点都需要额外的措辞来显式地将空指针封装在智能指针中。通过将包装移到构造函数中来消除重复代码会很好。

我知道这样做的一种方法是使用运行时检查传递的参数是否为非null,但如果可能的话,我更喜欢在编译时捕获一般的原始指针转换,并且只允许在原始指针绝对为null时进行编译。

(请务必提及您的技术是否依赖于C++11或C++14功能。)

由于C++11,您可以使用std::nullptr_t来满足您的需要。

演示。