通过模板判断Value是否为指针

有个参数,需要判断其Value是否为指针,如果是做相应的处理。

代码示例如下,后来发现is_pointer在std空间中。

#include <stdio.h>
#include<iostream>
#include<vector>
template<typename T>
struct is_pointer { static const bool value = false; };

template<typename T>
struct is_pointer<T*> { static const bool value = true; };

template<typename T>
void func(T& v) {
    std::cout << "is it a pointer? " << is_pointer<T>::value << std::endl;
}
int main(int argc, char *argv[])
{
    __uint128_t x = 1111UL;
    printf("%llu\n", x);
    func(x);
    return 0;
}

  

转载于:https://www.cnblogs.com/westfly/p/6183381.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Set类的实现: ```c++ #include <iostream> #include <algorithm> //用于求并集 using namespace std; template <class T> class Set { private: T* value; //T类型指针,用于存放集合的元素的动态数组,长度为length int size; //集合大小(元素个数) int length; //动态数组长度 public: Set(int len = 50); //构造函数 Set(Set<T>& A); //拷贝构造函数(选做) ~Set(); //析构函数 Set<T>& operator= (Set<T>& r); //重载"="使集合对象可以整体赋值 Set<T> operator+ (Set<T>& r); //重载"+"求两个集合对象的并集 void display(); //输出集合中所有元素 bool isExist(T v); //判断集合中是否包含元素v void add(T v); //向集合中添加一个元素 int getSize(); // 返回集合的大小 int getLength(); // 返回动态数组value的大小 void Resize(int len); // 修改动态数组value的大小 }; template <class T> Set<T>::Set(int len) { size = 0; length = len; value = new T[length]; } template <class T> Set<T>::Set(Set<T>& A) { size = A.size; length = A.length; value = new T[length]; for (int i = 0; i < size; i++) { value[i] = A.value[i]; } } template <class T> Set<T>::~Set() { delete[] value; } template <class T> Set<T>& Set<T>::operator= (Set<T>& r) { if (this == &r) { return *this; } size = r.size; length = r.length; delete[] value; value = new T[length]; for (int i = 0; i < size; i++) { value[i] = r.value[i]; } return *this; } template <class T> Set<T> Set<T>::operator+ (Set<T>& r) { Set<T> res(size + r.size); res.size = size + r.size; int i; for (i = 0; i < size; i++) { res.value[i] = value[i]; } for (int j = 0; j < r.size; j++) { if (!isExist(r.value[j])) { res.value[i++] = r.value[j]; } } return res; } template <class T> void Set<T>::display() { for (int i = 0; i < size; i++) { cout << value[i] << " "; } cout << endl; } template <class T> bool Set<T>::isExist(T v) { for (int i = 0; i < size; i++) { if (value[i] == v) { return true; } } return false; } template <class T> void Set<T>::add(T v) { if (isExist(v)) { return; } if (size == length) { Resize(length * 2); } value[size++] = v; } template <class T> int Set<T>::getSize() { return size; } template <class T> int Set<T>::getLength() { return length; } template <class T> void Set<T>::Resize(int len) { T* temp = new T[len]; int n = min(len, length); for (int i = 0; i < n; i++) { temp[i] = value[i]; } delete[] value; value = temp; length = len; } int main() { Set<int> s1(5); s1.add(1); s1.add(2); s1.add(3); s1.add(4); s1.display(); //1 2 3 4 Set<int> s2(5); s2.add(3); s2.add(4); s2.add(5); s2.add(6); s2.display(); //3 4 5 6 Set<int> s3 = s1 + s2; s3.display(); //1 2 3 4 5 6 return 0; } ``` 在main函数中,我们创建了两个集合s1和s2,并向它们中添加元素。然后,我们调用重载运算符“+”求它们的并集s3,并输出s3中的元素。输出结果如下: ``` 1 2 3 4 3 4 5 6 1 2 3 4 5 6 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值