使用构造函数作为谓词

Use constructor as predicate

本文关键字:谓词 构造函数      更新时间:2023-10-16

我们可以使用构造函数作为谓词吗?到目前为止,我设法做到的是:

std::vector<const char*> v1 = {
    "Hello", "from", "GCC", __VERSION__, "!"
};
std::vector<std::string> v2(v1.size());
std::transform(v1.begin(), v1.end(), v2.begin(),
    [] (const char* s) { return std::string(s); });

但是我想要一些方法来做std::tranform( ..., std::string).我试过std::string::stringstd::string::basic_stringstd::string::basic_string<char>

我会这样做:

std::vector<std::string> v2(v1.begin(), v1.end());

只需做一个简单的

std::vector<std::string> v2;
v2.reserve(v1.size()); // Not really needed
for(auto x : v1) v2.emplace_back(x);

窍是我们需要将typename传递给 template ,然后我们可以使用它来调用您想要的构造函数。

这是我想出的:

template<typename source, typename destination, typename iter, typename iter2>
void transform_object(iter begin, iter end, iter2 begin2)
{
    std::transform(begin, end, begin2, [](source s){ return destination(s); } );
}

并将其与您的原始代码一起使用:

transform_object<const char*, std::string>(v1.begin(), v1.end(), v2.begin());