【发布时间】:2017-02-27 19:20:51
【问题描述】:
我很长一段时间以来一直在努力尝试创建一个可以包含对多种类型变量的引用的数组/向量,请参见示例:
class Validate
{
private:
some_array/vector[]; //0 would refer to x, 1 to y, and so on..
uint8_t x;
uint16_t y;
int32_t z;
public:
Validate();
void doSomething(uint8_t &member);
void doSomething(uint16_t &member);
void doSomething(int32_t &member);
}
重点是我可以在“for循环”中轻松使用这个数组/向量,如下所示:
void Validate::doSomething(uint_8 &member)
{
//Do whatever with the variable refered to.
}
Validate::Validate()
{
for(int i = 0 ; i < 2 ; i++)
doSomething(some_array/vector[i]);
}
也许有人对我有一个答案或更好的解决方案。
【问题讨论】:
-
你可以尝试使用 boost::variant 来达到你的目的。
-
向量是同质的,它们只能包含一种类型的值。你可以做一些丑陋的多态技巧来做你正在尝试的事情,但更好的答案是你正在寻找一个 std::tuple。如果您希望能够像这样迭代容器,则需要使用一些 boost::fusion 或 boost::hana - esque 元函数。这一切都假设您可以在编译时确定类型。
-
我不是专家,但我首先想到的是创建一个
vector of void*我不知道这个设计有多好,但也许这可以解决问题。 -
您不能创建包含引用的容器或异构容器。
-
@PRP 那真是个坏主意。你怎么知道原来的类型是什么?所以不可能回弹,整件事情都是无用的。
标签: c++ arrays vector reference