我又不是程序员不要再为难我了 2023-02-07 15:07 采纳率: 50%
浏览 67
已结题

使用自定义的类型代替内置类型可行吗

问题遇到的现象和发生背景

最近想做一个类模板,希望兼容自己项目里的其他类和C++的内置类型。
同时希望这个类型支持直接调用模板类的初始化。这个昨天发过问答,只有一位teacher给回答说用CRTP。但是没有用上,自己查别的资料发现只要写using T::T;就可以了,所以问答就撤掉了,对那位回答的teacher说句不好意思。

template<typename T>
class Base : public T
{
public:
  using T::T;
  Base() {}
  //一些功能...
};

现在又遇到了新的问题,上面的这个类型Base<T>里面实际上没有申请储存空间,所有的数值都在继承到的模板类型typename T里面。这样一来又出现了新的问题,就是没办法支持C++的内置类型了。

我的解答思路和尝试过的方法

我自己的思路是,对Base<T>类的模板进行筛选,首先确定是否是C++内置类型,然后根据结果选择不同的模板来创建:

template <typename T, 
        typename = std::conditional<bool(is_class<T>::result), T, CoverType<T>> // is_class是网上抄的判断是否为类型的方法
class Base : T
{
  ...
};

//! CoverType<T>定义
template <typename T>
class CoverType
{
private:
  T content;
public:
  //! 模仿内置类型创建基础的运算规则
};
我想知道:

因为使用CoverType代替了内置类型,使用这种方式会不会导致运行速度降低很多,或者有什么隐患

  • 写回答

6条回答 默认 最新

  • 2301_76247172 2023-02-07 16:57
    关注

    基础类型数据用偏特化Base版本

    template<typename T, bool = std::is_class<T>::value>
    class Base : public T {
        T* t;
    public:
      using T::T;
      Base() {}
    };
    
    template<typename T>
    class Base<T, false>{
        T t;
    public:
      Base() {}
    };
    
    Base<int> b;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 2月15日
  • 已采纳回答 2月7日
  • 赞助了问题酬金15元 2月7日
  • 创建了问题 2月7日

悬赏问题

  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法