在C ++中是否有办法编写一个可以将编译时常量作为参数的函数,但是如果传递一个依赖于运行时的值会产生编译错误?具体来说,我有一个构造函数,其中使用空指针进行初始化将具有可接受的行为,但是使用非空指针初始化意味着正在进行一些时髦的事情。
详细信息,如果它们重要:可以使用智能指针构造类,但不应该使用(非空)原始指针构造。为简洁起见,我希望能够直接从空指针文字初始化,但智能指针不允许从原始指针进行隐式转换。这意味着在每个使用点都需要额外的措辞来明确地将空指针包装在智能指针中。通过将包装移动到构造函数中来删除代码会很好。
我知道一种方法是使用运行时检查传递的参数是否为非null,但是我更喜欢在编译时捕获一般的原始指针转换,如果可能,并且只允许在原始指针绝对为空时进行编译。
(请务必提及您的技术是否依赖于C ++ 11或C ++ 14功能。)