C ++:用户定义类型的向量?

时间:2018-12-27 07:01:16

标签: c++ class templates dynamic

我有一个要存储数​​据的向量。我希望用户能够确定存储向量的精度级别(浮点数或双精度数)。

如何根据用户输入声明向量?这显然行不通:

std::vector<userWantsFloats ? float : double> data; ...

2 个答案:

答案 0 :(得分:3)

您不能基于仅在运行时知道的值来选择用于类模板实例化的类型。

使用

std::vector<userWantsFloats ? float : double> data;
如果在编译时知道userWantsFloats的值,则

是确定的。如果仅在运行时不知道userWantsFloats的值,那就不好。

您将不得不使用以下内容:

if ( userWantsFloats )
{
   std::vector<float> data;
   // Use data
}
else
{
   std::vector<double> data;
   // Use data
}

为了能够最大程度地重用其余代码,它们必须是函数模板和/或类模板。

template <typename T>
void myAppLogic(std::vector<T>& data)
{
   // Do the work of your application
}

if ( userWantsFloats )
{
   std::vector<float> data;
   myAppLogic(data);
}
else
{
   std::vector<double> data;
   myAppLogic(data);
}

答案 1 :(得分:3)

选项可以使用std::variant

std::variant<std::vector<float>, std::vector<double>> data;

然后您可以根据用户输入初始化变量,但是只能使用std::visit

编写一次逻辑
std::visit([](auto&& vec) {
  // Do your thing
}, data);

如果不是C ++ 17,则boost具有一个启发了现在标准模板的变体模板。您可以改用它。咨询boost documentation