0

我有一些 C 代码,我正在尝试将它们转换/包装成 C++ 类。我遇到了一些 C 文字数组(如果我叫错了,请纠正我),我不确定如何在 C++ 构造函数中初始化它们,因为我认为你不能做文字,我认为这是编译时特定的, 到特定于运行时的东西。

我是否应该明确地将数组定义为特定大小,然后对构造函数中的数组执行 strcpy 或类似的文字处理?

char sysUpTime[] = {1,3,6,1,2,1,1,3,0};
4

3 回答 3

3

作为初始化列表或字符串操作的替代方案,您可以使用类似以下的内容(如果您真的想要):

struct Wrapper
{
    template <size_t N>
    Wrapper(const char(&arr)[N]) : vec(arr, arr+N) { }

    vector<char> vec;
};

由于我的长期懒惰,我已经公开了所有内容:)。然后你可以像这样初始化:

    char foo[] = { 1, 2, 3, 4, 5 };
    Wrapper bar(foo);

    copy(bar.vec.begin(), bar.vec.end(), ostream_iterator<int>(cout, ", "));
于 2012-12-31T01:44:51.683 回答
1

可以只使用 std::string 来存储 OID 然后初始化它,member initializer list例如:

#include <string>
class Wrapper
{
public:
  Wrapper() : sysUpTime("1.3.6.1.2.1.1.3.0") { }
private:
  std::string sysUpTime;
};

或者使用 C++11 std::array

class Wrapper
{
public:
  Wrapper() : sysUpTime{{1,3,6,1,2,1,1,3,0}} { }

public:
  std::array<char, 10> sysUpTime;
};
于 2012-12-31T01:20:19.193 回答
1

将不同大小的 c 样式数组传递给构造函数时的主要问题是您必须同时传递大小。这是将数组放入成员向量的示例:

#include <vector>
#include <iostream>

struct Test
{
  std::vector<char> sysUpTime;

  Test(const char sysUpTime[], size_t size) :
    sysUpTime(sysUpTime, sysUpTime + size)
  { }
};


int main()
{
  const char sysUpTime[] = {1,2,3,4,5};

  Test test(sysUpTime, sizeof(sysUpTime) / sizeof(char));
}

不幸的是,除了使用模板之外,我知道不使用动态数组(向量)就无法做到这一点,这意味着您将为数组大小的每一次变化都实例化一个单独的类。

于 2012-12-31T01:47:19.127 回答