【发布时间】:2015-03-19 03:24:18
【问题描述】:
我正在编写一种稀疏矩阵实现,实际上有两种不同的实现:一种用于轻类型(即sizeof(T) <= sizeof(int64),另一种用于重类型。
根据sizeof(T),我想实例化对应的类。我首先使用实例化 HeavyType 或 LightType 实现的超类进行了测试,但这需要从通用虚拟 BaseClass继承轻型和重型>,而通用调用类以这种方式使用一种或另一种(不是很干净):
template <class T> class Generic{
public:
Generic(){
if (sizeof(T) > TRESHOLDVALUE)
matrix_ = new HeavyType<T>();
else
matrix_ = new LightType<T>();
}
private:
matrix_ * BaseClass<T>;
};
这可行,但不干净,BaseClass 中的虚拟化会减慢执行速度...
我想只写一个模板类,并将它专门用于几种类型,但我想知道:是否可以专门针对sizeof(T) 的特定值(即相当于@987654325 @)?或可能的类型数组 (template <> class Matrix<arrayOfPossibleTypes> )?
我想避免为int、bool、uint_32、int32、etc 类型重写类。
有人有想法吗?
PS:
或者,我想用一个预编译器宏来选择 LightType 或 HeavyType 类,但我认为在 #if 预编译器语句中使用 sizeof() 是不可能的.
【问题讨论】:
-
std::conditional可能会有所帮助。
标签: c++ templates c-preprocessor