我创造了一个类型
using Parameter = std::tuple<unsigned int, std::string>;在我的类中,我有这样一个属性(注意:向量、unique_ptr和字符串都包括在内-没有问题)
class MyClass
{
public:
std::vector<std::unique_ptr<Parameter>> parameters;
public:
explicit MyClass(const std::vector<std::string> &data);
};有定义
MyClass::MyClass(const std::vector<std::string> &data){
for (int i = 0; i < data.size(); i += 2) {
this->parameters.insert(
std::unique_ptr<Parameter>(
static_cast<unsigned int>(std::stoi(data[i])),
std::string(data[i + 1])
)
);
}
}编译器的结果:
error: no matching function for call to ‘std::vector<std::tuple<unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::insert(semac::command::Parameter)’那么,我的问题是:是否有像我在代码中尝试的那样创建using MyTuple = std::tuple<...>;实例的方法?一般情况下,最好的方法是什么?
发布于 2017-08-10 07:53:07
(我正在创造答案,只是为了让这个问题得到答案)
正如Igor和一些程序员所言,正确的方法是使用std::make_unique或std::unique_ptr<Parameter>(new Parameter(static_cast<unsigned int>(std::stoi(data[i])), data[i + 1]))
最后的代码可能如下所示:
MyClass::MyClass(const std::vector<std::string> &data){
for (int i = 0; i < data.size(); i += 2) {
this->parameters.push_back(std::unique_ptr<Parameter>(new Parameter(static_cast<unsigned int>(std::stoi(data[i])), data[i + 1])));
}
}在user6386155会议中,可以使用emplace_back方法(背)来完成。
MyClass::MyClass(const std::vector<std::string> &data){
for (int i = 0; i < data.size(); i += 2) {
this->parameters.emplace_back(new Parameter(static_cast<unsigned int>(std::stoi(data[i])), data[i + 1]));
}
}在使用CLion IDE (2017.2.1)时也要小心,有一个bug
因为这件事我很困惑。
https://stackoverflow.com/questions/45586807
复制相似问题