C++ 查找并处理std::变体列表中的备选方案
让我们有一个非常简单的元素模板:C++ 查找并处理std::变体列表中的备选方案,c++,c++17,C++,C++17,让我们有一个非常简单的元素模板: template <typename T> struct Element { int id; T value; }; 模板 结构元素 { int-id; T值; }; 以及一个模板函数,用于处理其中两个: template <typename T1, typename T2, typename R> R DoSomething(T1 const& t1, T2 const& t2) { ; //
template <typename T>
struct Element
{
int id;
T value;
};
模板
结构元素
{
int-id;
T值;
};
以及一个模板函数,用于处理其中两个:
template <typename T1, typename T2, typename R>
R DoSomething(T1 const& t1, T2 const& t2)
{
; // do something with t1 and t2
}
模板
R剂量测量法(T1常数和T1,T2常数和T2)
{
;//用t1和t2做点什么
}
我需要同时存储不同的元素列表,
所以我定义了这些类型别名(以保持相同类型的向量)
在单独的列表中):
使用IntListT=std::list;
使用dblistt=std::list;
使用strlist=std::list;
要在单个类成员中保存所有元素,我使用以下映射:
using ListVariantT = std::variant<IntListT, DblListT, StrListT>;
std::map<std::type_index, ListVariantT> myElements;
使用listVariatt=std::variant;
地图髓质成分;
问题:
我的成员函数接收两个元素ID(当然是两个整数)。
如何找到两个请求的元素并将它们传递给DoSomething func
我绝对不会坚持将所有元素存储在单个映射中或使用std::variant。但由于性能原因,应保留(许多)不同向量中的存储元素
多谢大家
编辑:
- 所有ID在所有
元素中都是唯一的。所以ID明确地标识了一个元素
- 类型之间操作的运算符和结果类型由系统设计给出(通过专门化类型
元素
的标准运算符),因此模板参数R在实际代码中毫无意义(仅用于说明和完整性)
- std::访问在这里没有多大帮助。我需要找到(最终)不同类型的两个不同元素(或对它们的引用),然后将它们传递给DoSomething()函数
- “绩效原因”很难不深入细节来解释。我有很多相同类型元素的不同齐次向量,我用不同的方式处理它们。通常是迭代和做一些数学/统计/转换等。现在我扩展了功能,以支持跨不同类型元素的操作。例如,如果我有
和元素的向量
,我应该能够将所有元素累积到元素
的新向量中。或者,如果用户选择一个元素E1,另一个元素E2,将它们的ID传递给我,我应该能够找到它们并返回E1+E2,可能是E1*E2,等等元素
std::list
,您打算如何高效地查找具有特定ID的元素?您熟悉吗?这就是它的目的。你能更具体地说明你的“性能原因”吗?那么我们可以假设传入的两个int
s告诉你元素的类型(int/double/string)和id
?呼叫站点是否知道它所期望的类型?
using ListVariantT = std::variant<IntListT, DblListT, StrListT>;
std::map<std::type_index, ListVariantT> myElements;