如何创建依赖模板的成员类型
How to create template dependent member type
我正在尝试减少和简化一些可怕的嵌套和过度专门的模板化c++代码。为此,我希望能够声明依赖于实例化函数或类的模板类型的成员类型。
将以下泛型类模板作为结果模板特化。'a'的类型取决于实例化类型。
template <typename Float> class A;
template <>
class A<double> {
double a;
}
};
template <>
class A<float> {
float a;
}
};
template <>
class A<short> {
float a;
}
};
除了'a'类型,即模板类型到double->double类型、float->float类型和short->float类型的映射之外,其他类都是相同的。是否有一种方法可以简单地封装这个映射,以允许只写一次类?
我想我想写一些像下面这样的东西,但我不知道这是否可能。
typedef double Float2<double>;
typedef float Float2<float>;
typedef float Float2<short>;
template <typename Float>
class A {
Float2<Float> a;
}
};
注意我使用的是c++ 03,不能使用c++ 11来实现这个目的(我认为decltype可能在这里有用,但我不确定)
不需要使用decltype
。你可以只创建一个类型trait并专门化它来提供适当的类型映射:
template<typename>
struct mapper;
template<>
struct mapper<double> {
typedef double type;
};
template<>
struct mapper<float> {
typedef float type;
};
template<>
struct mapper<short> {
typedef float type;
};
template <typename Float>
class A {
typedef typename mapper<Float>::type float_type;
float_type a;
};
相关文章:
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 使用成员在类中创建 lambda 表达式
- 使用静态成员声明类时遇到问题
- 没有公共构造函数作为另一个类模板成员的类模板
- 我们可以通过 IPC 传递具有动态管理成员的类对象吗?
- 具有 STL 向量类型成员的类的复制内存
- 内存中类位置的成员是否取决于类成员在类定义中的位置?
- C++成员变量类Q_PROPERTY QML 中不可用
- 提升 - 类没有名为"序列化"的成员(抽象类)?
- C++ - 移动具有固定大小的 c 样式数组成员的类的构造函数
- 具有未知结构作为成员的类
- 清除具有已删除赋值运算符的成员的类实例
- 错误:请求成员 .. 是非类类型"char"
- 没有成员的类的<运算符
- 从相同类型的静态成员进行类内初始化
- 如何设计一个始终是另一个类的成员的类
- 使用 Boost::Serialization 序列化具有 std::mt19937_64 成员的类
- C++ 将队列作为成员的类的构造函数和析构函数
- 移动具有常量成员的类的构造和分配
- 如果包含引用成员的类中缺少原始变量,为什么它仍然可以访问?