gpt4 book ai didi

c++ - 提供 "safe"push() 函数以与 auto_ptr 一起使用

转载 作者:搜寻专家 更新时间:2023-10-31 01:19:27 25 4
gpt4 key购买 nike

我想像这样声明一个“安全的”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::堆栈)。我可以假设它有一个 push() 成员函数。

  • 我不能使用 nullptr,因为我不需要 C++0x 编译器。

最佳答案

您可以按如下方式重载该函数:

template<class StackType,typename T>
inline void push( StackType &s, auto_ptr<T> p ) {
s.push( p.get() );
p.release();
}

template<class StackType>
inline void push( StackType &s )
{
s.push( reinterpret_cast<typename StackType::value_type>( 0 ) );
}

然后使用它:

push( my_stack );
push( my_stack, auto_ptr_var );

关于c++ - 提供 "safe"push() 函数以与 auto_ptr 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6036183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com