问题遇到的现象和发生背景
最近想做一个类模板,希望兼容自己项目里的其他类和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代替了内置类型,使用这种方式会不会导致运行速度降低很多,或者有什么隐患