c++ - 初始化 vector 类型的静态类成员

标签 c++ arrays static instance-variables

我有一个带有 vector 类型的私有(private)静态实例变量的类 >。我有一个初始化这个变量的策略,它涉及将一个临时数组传递给一个不是类成员的函数。这适用于旧版本的 g++,但不适用于 g++ 4.8.2。

这是我正在做的:

初始化类.cpp:

#include "initclass.h"

#define NINT 5

vector<pair<int,int> > initInstance(const pair<int,int> *array, int nint)
{
  vector<pair<int,int> > vect;
  vect.assign(array, array + nint);

  return vect;
}

const vector<pair<int,int> > initclass::_intvect = 
  initInstance((pair<int,int>[NINT]){pair<int,int>(1,2), pair<int,int>(3,4), 
                                     pair<int,int>(5,6), pair<int,int>(7,8), 
                                     pair<int,int>(9,10)}, 
    NINT);

初始化类.h:

#ifndef INITCLASS_H_
#define INITCLASS_H_

#include <utility>
#include <vector>
using namespace std;

class initclass
{
public:      
  static const vector<pair<int,int> > & intvect() { return _intvect; };

private:
  const static vector<pair<int,int> > _intvect;      
};

#endif

我可以通过在调用 initInstance 函数之前声明一对对象的数组来完成这项工作,但我想知道是否有更好的方法(这当然是我正在尝试做的一个简化示例:在在我的真实代码中,有许多数组对初始化函数的调用,我宁愿不在每个函数调用之前声明它们中的每一个)。

编辑: 我想了一下,我在这里找到了解决方案:Using array init list as temporary in C++11?

第二个答案有一个从常量数组​​到(非常量)指针的转换。在我的例子中,这会将 initInstance 函数调用更改为:

const vector<pair<int,int> > initclass::_intvect = initInstance((pair<int,int>*)(const pair<int,int> []){pair<int,int>(1,2), pair<int,int>(3,4), pair<int,int>(5,6), pair<int,int>(7,8), pair<int,int>(9,10)}, NINT);

这会编译,但出于某种原因,initInstance 函数永远不会被调用。

最佳答案

是的,有更好的方法。您可以删除那个糟糕的功能,它没有任何用处。您可以像这样初始化 vector :

#include <iostream>
#include <vector>
#include <utility>




struct A
{
    const static std::vector<std::pair<int,int> > intvect;
};

const std::vector<std::pair<int,int> > A::intvect{ std::pair<int,int>(1,2), std::pair<int,int>(3,4), 
                                                   std::pair<int,int>(5,6), std::pair<int,int>(7,8), 
                                                   std::pair<int,int>(9,10) };

int main()
{
    (void) A::intvect;
}

这是使用 vector 的 c++11 第 7 个构造函数- 带有初始化列表的那个。

关于c++ - 初始化 vector 类型的静态类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22340211/

相关文章:

sql - 在 PostgreSQL 中使用 Jsonb_array_elements_text() 的 2 种方法

c# - 激活器和静态类

java - 如何避免java中的 "non-static method referenced from a static context"?真的很简单

c++ - Visual Studio C++ 能够编译并出现编译错误(红色下划线)

c++ - 为什么传递对 Mutex 类的引用不是一个好的设计?

arrays - 在 Swift 的 indexPath 中保存 TableView 数组

c++ - 将静态 thread_local 与 std::mt19937 一起使用有什么好处?

c++ - 按值传递函数(?)而不是函数指针?

c++ - 从 RGB 值数组生成 BMP 文件

java - java将每条记录存储到json数组