小编Jwa*_*ton的帖子

自动类型到自动方法失败.为什么?

作为一个学习练习,我正在构建一个类来管理旧的熟悉的argc和argv值为main.我将argv存储为std :: strings的std :: vector.目前我想循环我的对象,好像它是向量.我遇到的问题是我的解决方案高度依赖于我对容器的选择,当我尝试修复它时编译器会中断.注意:

这是我希望我的班级为这个例子工作的方式.

int main(int argc, char* argv) {
  CLI options(argc, argv);

  for (auto option : options) {
    cout << option << endl;
  }
}
Run Code Online (Sandbox Code Playgroud)

这是相当微不足道的,但确实需要一点时间的研究.这是我的头文件

typedef char* cstring;

class CLI {
  std::vector<std::string> arguments;
public:
  CLI(const int argc, const cstring argv[]);

  std::vector<std::string>::const_iterator begin();
  std::vector<std::string>::const_iterator end();
};
Run Code Online (Sandbox Code Playgroud)

和我的CLI类的源文件.(减去包括等)

CLI::CLI(const int argc, const cstring argv[]) {
  arguments = std::vector<std::string>(argv, argv + argc);
}

std::vector<std::string>::const_iterator CLI::begin() {
  return arguments.begin();
}

std::vector<std::string>::const_iterator CLI::end() {
  return arguments.end();
}
Run Code Online (Sandbox Code Playgroud)

这很好用,但这是我的第一个问题.如果我决定使用链接列表而不是向量,我现在至少有五个需要更改的位置,如果我的客户端代码有一个愚蠢的日子并且不使用auto进行循环(或者其他否则它确实).这感觉应该是一个自动救援的案例!使用新的C++功能,我应该能够将方法签名更改为:

... // Header …
Run Code Online (Sandbox Code Playgroud)

c++ stl auto c++14

5
推荐指数
1
解决办法
464
查看次数

标签 统计

auto ×1

c++ ×1

c++14 ×1

stl ×1