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

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

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

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

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

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

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

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

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

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

基础类型数据用偏特化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;

是的,使用CoverType模板来代替内置的类型会带来一定的性能损失。这是因为CoverType类模板可能会被实现成一个复杂的类,而它的效率比内置类型要低得多。此外,CoverType类模板还会限制使用者可以使用哪些操作符,这样可能会对使用者的编程体验造成一定的影响。

另外,为了更好地支持内置类型,可以考虑使用enable_if技术来排除掉内置类型,以便在实例化Base类模板的时候,可以避免使用CoverType类模板,从而避免性能损失和对使用者的编程体验的影响。

我实在没想出什么地方需要自己定义一个类来代替系统提供的int

兼容类也就算了,兼容内置类型有什么意义呢?内置类型是大家共识的一个符号。

可以定义类实现基本数据类型的功能,但是不能替换基本数据类型。

使用 CoverType 代替内置类型可能会影响性能,因为 CoverType 会对内置类型封装,从而使代码变得更复杂。此外,如果您没有为 CoverType 实现所有与内置类型相关的运算,则可能出现未定义行为。您需要仔细测试您的代码以确保它正常工作,并且在必要时对 CoverType 实现进行适当的优化。