我想声明一个“安全”push()
函数,以便auto_ptr
像这样使用:
template<class StackType,typename T>
inline void push( StackType &s, auto_ptr<T> p ) {
s.push( p.get() );
p.release();
}
我也希望它适用于空指针,例如:
push( my_stack, 0 ); // push a null pointer
因此,专业化:
template<class StackType>
inline void push( StackType &s, int p ) {
s.push( reinterpret_cast<typename StackType::value_type>( p ) );
}
虽然它有效,但它既丑陋又允许错误代码,例如:
push( my_stack, 1 ); // ???
编译。
我怎样才能写出一个push()
只接受0
作为有效值int
(对于空指针)的特化?
要求
StackType
是一些我必须使用的类似堆栈的容器类,并且我无法更改其源代码(就像std::stack
)。我可以假设它有一个push()
成员函数。我不能使用
nullptr
,因为我不需要 C++0x 编译器。