使用' const'构造类。运行时的参数

时间:2016-08-12 01:48:58

标签: c++ class parameters runtime const

这可能是一个简单的问题,但我无法找到解决问题的好方法。我使用的API有一个类,其构造函数需要 const double 作为参数,例如:

MyClass(const double value);

问题是我想构造一系列实例,但传递的值只能在运行时知道。

更清楚的是,这就是我所做的:

.h文件

std::vector<MyClass> my_class_vec;
std::vector<double> my_value_vec

在运行时,我可以获取分配 my_value_vec 的值。我想使用这些值来构建 my_class_vec

.cpp文件

for(int i = 0; i < my_value_vec.size(); i++)
  my_class_vec(my_value_vec[i]);

我知道这是错误的,因为我无法将作为 const double 参数传递。我在实例构建方面也有一些不正确的用法,但我找不到一个好的方法来做我想要的。有没有人有任何想法?我非常感谢您的意见。

2 个答案:

答案 0 :(得分:0)

  

因为我不能将double作为const double参数传递。

当然,你可以解决这个问题。

问题是my_class_vec(my_value_vec[i]);,如果你想根据my_class_vec的值将元素添加到my_value_vec[i],你可以使用std::vector::emplace_back(因为C ++ 11) ):

my_class_vec.emplace_back(my_value_vec[i]);

答案 1 :(得分:0)

这是错误的,但原因完全不同。对于初学者,但您当然可以将double作为const double parameter传递。

void foo(const double b)
{
}

double c;

void bar()
{
  foo(c);
}

这将编译没有任何问题。 const指定的唯一内容 在这种情况下 ,是函数foo()无法修改其参数。就是这样。无论如何,它都与传递的值是恒定的还是可变的无关。来电者可以自由传递doubleconst double作为参数。此参数按值传递。这意味着在每种情况下都会为被调用函数创建参数的副本。该副本可以来自doubleconst double,但没有区别。

你的问题完全不同。构建向量的尝试从根本上说是错误的。所有错误。

std::vector<MyClass> my_class_vec;
std::vector<double> my_value_vec;

my_class_vec是一个向量。

   my_class_vec(my_value_vec[i]);

由于std::vector未实现operator()的简单原因,这将无法编译,而my_class_vec(something)正在此处调用。 operator()不向向量添加任何内容。没有这样的事情。这并没有构建任何东西。这会尝试在对象上调用double,并将std::vector作为参数传递。由于()未实现for (const auto &value:my_value_vec) my_class_vec.emplace_back(value); 运算符,因此无法编译。

使用现代C ++初始化样本向量的正确方法:

my_class_vec

这假定emplace_back()为空。 value在向量的后端构造一个新值,将double const传递给构造函数。请注意,这将在范围迭代中使用或不使用\限定符。