【发布时间】:2015-07-02 21:10:23
【问题描述】:
我的问题很简短:
我需要一个包含不同类型的向量,例如:
std::vector<int,double> vec;
vec.emplace_back((int) 1);
vec.emplace_back((double) 2.0);
我尝试使用 boost:variant,但问题是每次想要使用值时都必须访问/获取向量中的数字。
我为向量定义了初始值,因此类型是静态的并且在编译时定义。此外,我希望能够对它们进行迭代(这就是我使用矢量的原因——它也可以是地图或任何其他容器)。
我想要的是在程序中使用像 int 或 double 这样的向量条目,而不使用 boost::get 或类似的东西。我认为这应该是可能的,因为每个条目的类型是在编译时完全定义的,但我不知道如何让它工作。
double d=vec[1]*3.0; //this should somehow work
int i=vec[0]*8; //this also without any get or anything
我尝试使用元组,但我对它们没有太多经验,而且似乎很难对它们进行迭代。
for(auto &elem : vec) std::cout << elem << std:endl; //this or sth. similar should also work
非常感谢任何帮助。
【问题讨论】:
-
没有
boost::variant之类的东西或它的一些变体是不可能的。 -
@AnT 你是说它的一些变体?哈哈
-
正如@Ant 所说的那样,或者你必须有一个通用的基类并存储指针或智能指针。但即便如此,如果这些类没有共同点,你也必须
dynamic_cast()等。如果您需要重载operator<<和operator*,则所需的操作都将以某种方式工作 -
我不知何故觉得这个向量首先不是解决潜在问题的好工具(当然只是猜测,因为我不知道潜在问题)。您可能应该有两个向量或直接获取实际数据类型。
-
在您的示例中,您可以只使用双精度向量。
标签: c++ variables boost vector compile-time