目前(自 C ++ 11 )使用function addToWishList(product_id) {
$.ajax({
url: 'index.php?route=account/wishlist/add',
type: 'post',
data: 'product_id=' + product_id,
dataType: 'json',
success: function(json) {
$('.success, .warning, .attention, .information').remove();
if (json['success']) {
$('#notification').html('<div class="success" style="display: none;">' + json['success'] + '<img src="catalog/view/theme/default/image/close.png" alt="" class="close" /></div>');
$('.success').fadeIn('slow');
$('#wishlist-total').html(json['total']);
$('html, body').animate({ scrollTop: 0 }, 'slow');
url = $('base').attr('href') + 'index.php?route=account/wishlist'; // Add this line
location = url; // Add this line
}
}
});
}
设计boost::recursive_wrapper
很简单:
std::unique_ptr
但目前它是通过运营商template< typename T >
class recursive_wrapper
{
std::unique_ptr< T > storage;
public :
template< typename ...Args >
recursive_wrapper(Args &&... args)
: storage(std::make_unique< T >(std::forward< Args >(args)...))
{ ; }
template< typename R >
operator R & () noexcept
{
return static_cast< R & >(*storage);
}
template< typename R >
operator R const & () const noexcept
{
return static_cast< R const & >(*storage);
}
void
swap(recursive_wrapper & other) noexcept
{
storage.swap(other.storage);
}
};
和::new
设计的。在现代C ++中使用原始boost::checked_delete
和new
运算符被认为是一种不好的做法。
如果target只是 C ++ 11 更新,那么使用delete
实现recursive_wrapper
是否有任何缺点(我的意思是编译时性能)和运行时性能下降,例如或其他东西)?如果作为要求的向后兼容性不复存在怎么办?
答案 0 :(得分:1)
我想你会发现不这样做的原因与性能无关。
boost::recursive_wrapper
专门设计为允许boost::variant
包含自己。我很确定如果你检查boost::variant
的实现,你会发现递归模板的模板扩展依赖于看起来像这样的特化:
template<class...T>
struct SomeClass<boost::recursive_wrapper<boost::variant<T...>>>
{
....
除非您计划重新实现boost::variant
以使用不同的包装类,否则会使它们不兼容。