【问题标题】:Repeated/ Multiple class members of the same data type重复/相同数据类型的多个类成员
【发布时间】:2021-03-18 15:51:14
【问题描述】:

我不知道我需要多少同一个类实例的成员变量 varX。 varX 具有相同的数据类型。在 .hpp 中声明它们是不可能的

// A.hpp
Class A
{
private:
  T var1; 
  T var2;
  T var3;
  void some_method_using_varX();
  ...
}
// A.cpp
void A::some_method_using_varX()
{
this->varX = this->someMethod([this]() //varX has to be from the same class instance "this"
  {
    this->varX->otherMethod(); //I also need to access varX inside lambda
  });
}

编辑:

问题是我没有目的跟踪向量中的索引。如何确保在 lamda 函数中访问正确的元素?

void A::some_method_using_var()
{
    this->vars.push_back(var);
    this ->vars.back() = this->someMethod([this]()
   {
      //when the lambda access the var it may not be the same var 
      //as some_method_using_var() could be called 
      //before the previous lambda finishes
      this->vars.back()->otherMethod(); 
      
    });
}

【问题讨论】:

  • 使用std::vector?
  • std::vector 可能是你想要的。
  • 请注意,虽然vector 可能是您想要的(提供的细节很少),但它并不是一个适合所有建议的尺寸。例如,vector 不能保存 const 值。

标签: c++ declare


【解决方案1】:

听起来你应该使用std::vector

class A
{
private:
  std::vector<T> vars; 
  void some_method_using_var();
};

然后你可以使用它的索引来访问一个特定的,例如[0]是第一个变量

void A::some_method_using_var()
{
    for (auto& var : vars)
    {
        var = someMethod([&var]()
        {
            var->otherMethod();
        });
    }
}

【讨论】:

  • 如何将所有元素保持在“抽象”级别,这样我就不必指定索引?
  • @txlei 查看我的编辑,您可以在 lambda 中捕获 var 本身,因此不需要索引。
  • 感谢您的跟进。在some_method_using_var() 中,每次都会声明一个新的局部变量varT var;。所以在提出的 for 循环中, var 元素仅适用于先前的 lambda(在我的情况下是回调函数)。通过指定索引,我的程序逻辑可以工作,但想看看是否有其他选择。您知道将structvar 声明为成员是否可行?但我不知道如何在some_method_using_var() 中实现一个新结构并访问成员var,你能举个例子吗?
【解决方案2】:

在类中使用std::vector&lt;T&gt; 类型的成员。

【讨论】:

    最近更新 更多