类似 STL 对的三胞胎类 - 我自己滚
STL-pair-like triplet class - do I roll my own?
我想使用一个三重类,尽可能类似于std::p air。STL似乎没有。我不想使用太重的东西,比如 Boost。我能从某个地方举起一些有用的自由和开放源码软件非限制性许可证三重奏类吗?我应该自己滚吗?我应该完全做点别的事情吗?
编辑:关于std::tuple
...
三胞胎特定的班级真的没有好处吗?我的意思是,对于元组,我做不到
template<typename T1, typename T2, typename T3> std::tuple<T1, T2, T3> triple;
现在我可以吗?我不必对单个类型组合三元组进行类型定义吗?
不,不要自己动手。相反,看看std::tuple
- 这是std::pair
的概括。所以这里有一个值初始化的 int
s:
std::tuple<int, int, int> triple;
如果需要,可以仅具有三元组的类型别名:
template<typename T1, typename T2, typename T3>
using triple = std::tuple<T1, T2, T3>;
如果可以使用 C++11,请使用 std::tuple
如果没有,请使用 boost::tuple
如果您使用的是 C++11,则可以使用 std::tuple
.
如果您使用的是 C++03,那么您要么需要求助于滚动自己的(这不太难),要么使用 Boost 中的tuple
。
我认为你需要这样的东西:
template<typename T>
struct triplet
{
T first, middle, last;
};
template<typename T>
triplet<T> make_triplet(const T &m1, const T &m2, const T &m3)
{
triplet<T> ans;
ans.first = m1;
ans.middle = m2;
ans.last = m3;
return ans;
}
用法示例:
triplet<double> aaa;
aaa = make_triplet<double>(1.,2.,3.);
cout << aaa.first << " " << aaa.middle << " " << aaa.last << endl;
triplet<bool> bbb = make_triplet<bool>(false,true,false);
cout << bbb.first << " " << bbb.middle << " " << bbb.last << endl;
我正在使用这个,它足以满足我的目的...但是,如果您想要不同的类型,只需进行一些修改:
template<typename T1, typename T2, typename T3>
struct triplet
{
T1 first;
T2 middle;
T3 last;
};
template<typename T1, typename T2, typename T3>
triplet<T1,T2,T3> make_triplet(const T1 &m1, const T2 &m2, const T3 &m3)
{
triplet<T1,T2,T3> ans;
ans.first = m1;
ans.middle = m2;
ans.last = m3;
return ans;
}
用法将非常相似:
triplet<bool,string,myDouble> ccc;
ccc = make_triplet<bool,string,double>(false,"AB",3.1415);
ccc.middle = "PI";
cout << ccc.first << " " << ccc.middle << " " << ccc.last << endl;
要添加与 std::p air 的相似性方面,您可以定义一个具有第一、第二和第三的类。我的猜测是,在这种情况下,您无法避免创建 std::p air 的子类并添加"第三"成员。这是几行代码。
此外,如果你经常将这些东西与相同的类型一起使用,你也可以制作双胞胎和三胞胎类。使用 C++-11 的"使用"轻松制作,例如:
template <typename T> using twins = std::pair<T,T>;
相关文章:
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 将矩阵乘以我自己的输入的向量
- 如何正确包含我自己的标头?
- 如何使用我构建的库,而不会从源代码出错,但不为我自己的项目编译?
- 预期'while'或预期'}' 之前回答是,但我自己无法修复
- 为什么__builtin_popcount比我自己的比特计数功能慢?
- 在wxWidgets的事件中包含我自己的数据的最佳方法是什么?
- 如何在我自己的staticLib中使用staticLib
- 在我自己的堆栈中实现top的问题
- 尝试检查输入的文本与我自己的自定义答案
- 如何在我自己的类中重载"+"和"<<"运算符
- C++:我自己类的动态数组
- 如何在 C++ 中使用我自己的类中的库?
- 如何链接我自己的 .so 文件而不是操作系统捆绑包 .so 文件?
- 如何构建默认使用我自己的构建libc ++的clang?
- 访问另一个类(系统)的非静态字段,就好像它是我自己的字段一样 - 优雅地
- 分发我自己的程序的几个问题
- 尝试编写我自己的字符串类在 gcc 中出现异常
- Qt - 重新实现QIODevice,实时听到我自己的声音
- 类似 STL 对的三胞胎类 - 我自己滚