2014-10-17 61 views
1

有没有办法在C++中编写一个可以将编译时常量作为参数的函数,但是如果您传递一个与运行时间相关的值,将会产生编译错误?具体来说,我有一个构造函数,其中使用空指针进行初始化将具有可接受的行为,但使用非空指针进行初始化意味着正在发生一些奇怪的事情。编写一个只需要编译时常量参数的函数?

详细信息,如果它们很重要:类可以用智能指针构造,但不应该由(非空)原始指针构造。为简洁起见,我希望能够从空指针直接初始化,但智能指针不允许来自原始指针的隐式转换。这意味着在每个使用点需要额外的语言将空指针显式包装到智能指针中。通过将包装移动到构造函数中去重复代码会很好。

我知道这样做的一种方法是使用运行时检查传递的参数是否为非空值,但我更希望在编译时捕获一般的原始指针转换,如果可能的话,并且只有在原始指针肯定为空时才允许编译。

(请务必注明,如果你的技术依赖于C++ 11或C++ 14功能。)

+4

有一个默认的构造函数不会带任何*指针并将其视为一个空的智能指针会更容易吗?即两个构造函数,一个需要智能指针,另一个需要* nothing *?为什么把调用者的责任传递给NULL而不是简单地传递任何东西。 – WhozCraig 2014-10-17 21:48:51

+0

您可能会考虑使用运行时检查,限制它调试构建类型。如果你想坚持编译时检查,你也可以考虑'static_assert'。 – 2014-10-17 23:33:11

回答

0

由于C++ 11,你可以使用std::nullptr_t你想要的东西。

Demo

相关问题