C++模版结构体的使用

1. convert_pointer 结构体模板

template<typename _SourceIterator, typename _DestT>
struct convert_pointer {
    typedef typename convert_pointer<typename _SourceIterator::pointer, _DestT>::type type;
};

作用

  • 这是一个递归模板,用于处理 _SourceIterator 类型的迭代器指针转换
  • 它假设 _SourceIterator 具有 pointer 类型(通常是迭代器的 value_type*)。
  • 递归调用 convert_pointer<typename _SourceIterator::pointer, _DestT>,直到 _SourceIterator 变为普通指针类型(即 _SourceT*)。
  • 适用于 STL 迭代器或自定义迭代器,确保能正确转换指向 _DestT 的指针。

2. convert_pointer 的特化

定义两种对普通指针类型的特化处理。

(1)普通指针转换

template<typename _SourceT, typename _DestT>
struct convert_pointer<_SourceT*, _DestT> {
    typedef _DestT* type;
};
  • 如果 _SourceIterator_SourceT*,那么转换后的类型是 _DestT*
  • 示例
    convert_pointer<int*, float>::type  // 结果是 float*
    

(2)const 指针转换

template<typename _SourceT, typename _DestT>
struct convert_pointer<const _SourceT*, _DestT> {
    typedef const _DestT* type;
};
  • 如果 _SourceIteratorconst _SourceT*,则转换后的指针仍然保持 const 修饰符,即 const _DestT*
  • 示例
    convert_pointer<const int*, float>::type  // 结果是 const float*
    

3. convert_pointer_t 别名

template<typename _SourceIterator, typename _DestT>
using convert_pointer_t = typename convert_pointer<_SourceIterator, _DestT>::type;
  • 这是 convert_pointer类型别名(alias template),简化了类型使用方式。
  • 示例
    convert_pointer_t<const int*, double>  // 结果是 const double*
    

4. 代码应用场景

泛型指针转换时,特别适用于 STL 迭代器或自定义迭代器:

  • 支持普通指针与 const 指针的转换
  • 用于 STL 迭代器,确保指向 value_type* 的指针能正确转换
  • 减少 const 处理的复杂度,增强泛型编程的灵活性

5. 示例代码

#include <iostream>
#include <vector>

int main() {
    using Pointer1 = convert_pointer_t<int*, double>;
    using Pointer2 = convert_pointer_t<const int*, double>;

    std::cout << std::boolalpha;
    std::cout << "Pointer1 is double*: " << std::is_same<Pointer1, double*>::value << "\n";
    std::cout << "Pointer2 is const double*: " << std::is_same<Pointer2, const double*>::value << "\n";

    return 0;
}

输出

Pointer1 is double*: true
Pointer2 is const double*: true

说明 convert_pointer_t 能正确保留 const 修饰符并转换指针类型。


总结

🔹 convert_pointer 作用:根据输入类型 _SourceIteratorconst 修饰符,生成新的 _DestT 指针类型
🔹 采用 递归模板,支持 STL 迭代器类型的转换。
🔹 适用于泛型编程,保证指针转换时不会丢失 const 修饰符。
🔹 提供 convert_pointer_t 简化模板使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点云SLAM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值