Effective C++ : delete和模板成员函数以及模板函数.

 #include <iostream>
#include <type_traits>
template<typename T>
void processPointer(T* ptr) //假如我们不想让该模板函数接受char* 类型的指针这怎么办呢? 
{
 std::cout<<*ptr<<std::endl;
}
template<>
void processPointer<char>(char*)=delete; //OK,解决了问题.
template<typename T>
class Node{
 private:
  T key;
  
  public:
   template<typename Ty>
   Node(const Ty& key_);
   
   ~Node()=default;
   
   template<typename Ty, typename Judge = typename std::enable_if< std::is_integral<Ty>::value >::type >
   void setKey(Ty* k);
   
   
};
template<typename T>
template<typename Ty>
Node<T>::Node(const Ty& key_)
        :key(key_)
{
 //
}
template<typename T>
template<typename Ty, typename Judge>
void Node<T>::setKey(Ty* k)
{
 if(k != nullptr){
  this->key = *k;
 }
}
int main()
{
 int n1 = 10;
 char c1 = 'c';
 //processPointer(&c1); //error,因为我们已经删除掉了.
 processPointer(&n1);
 
 Node<int> node(10);
 int* p1 = new int(20);
 void* p2 = p1;
 
 node.setKey(p1);
 //node.setKey(p2); //error.
 
 node.changeKey(p1);
 
 delete p1;
 
 return 0;
}

转载于:https://my.oschina.net/SHIHUAMarryMe/blog/656992

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值