有没有办法创建一个指针类型,可以指向具有不同 Comp 模板参数的集
Is there any way to create one pointer type that can point to sets with different Comp template argument?
我有两个set
对象声明如下:
set<order, Comp1> s1(comp1);
set<order, Comp2> s2(comp2);
comp1
和 comp2
分别是类型 Comp1
和 Comp2
的函子。
我想知道是否有任何方法可以根据我的需要使用某种类型的指针指向s1
或s2
?
set<order>*
似乎不起作用。我希望有一个map<int, set<order>*>
告诉我给定的索引,它set
(通过指针(索引(及其存储在order
中的相关信息(在其中。有什么方法可以制作那张地图吗?
更新:我正在试验函数模板。函数原型为:
template <typename IN, typename WAIT>
void process_incoming(multiset<order, IN> &incoming, multiset<order, WAIT> &waiting, int seq)
我有两个set
:一个元素按升序排序,另一个按降序排序。我有一个函数来处理当新元素添加到两个集合中的任何一个时,它需要"吃掉"另一个set
的前几个元素,以便两个集合中的元素不重叠(这意味着升序排序集的第一个元素大于降序排序集的第一个元素(。我可以编写两个函数来处理将元素添加到一个集合时的情况,以及将元素添加到另一个集合时的另一个函数。但大多数代码只是重命名表示这两个集合的变量。一切都很好,直到我还需要能够擦除集合中的一些元素。我可以有两张地图并检查这两张地图以查看元素是s1
还是s2
.但是,最好有一张地图来存储所有这些信息。
所有模板参数都是类型的一部分。要制作一个可以指向两个集合的指针,你需要一个像 void *
这样的"泛型"指针,然后在使用它时将其转换为正确的类型。
这种强制转换使解决方案几乎无用,因为您需要知道指针的确切类型,如果您将其转换为错误的类型(即当它真正指向s1
时将其转换为std::set<order, Comp2>*
(,您将具有未定义的行为。
根据您的设计和用例,您可以使用模板。如果需要将指针传递给设置为泛型函数或将其存储在类中,则此方法非常有效。
简而言之:除非在某些情况下您可以使用模板,否则这确实不可行。
union
有用的地方。
union pSet
{
set<order, Comp1>* comp1;
set<order, Comp2>* comp2;
};
union pSet p.comp1 = &s1;
/* do work with pSet.comp1 */
p.comp2 = &s2;
/* ... */
不过,您可能会有更好的名字。
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 视图中的参数推导失败:take_while
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 使用指向成员的指针将成员函数作为参数传递
- 没有名称的C++模板参数
- 有没有办法创建一个指针类型,可以指向具有不同 Comp 模板参数的集