您可以将构造函数用作 UnaryOperator 吗?
Can you use a constructor as a UnaryOperator?
如果我有一个带有一元构造函数的 class,我能否以某种方式将该构造函数用作算法中的 UnaryOperator?即:
#include <algorithm>
#include <vector>
class Thing
{
public:
Thing(int i)
: m_i(i)
{}
int i() {
return m_i;
};
private:
int m_i;
};
int main() {
std::vector<int> numbers{0,4,-13,99};
std::vector<Thing> things;
std::transform(numbers.begin(), numbers.end(), std::back_inserter(things), Thing);
}
上面的代码行不通,下面的代码行得通,但我想知道是否有更好的方法:
#include <algorithm>
#include <vector>
class Thing
{
public:
Thing(int i)
: m_i(i)
{}
int i() {
return m_i;
};
private:
int m_i;
};
int main() {
std::vector<int> numbers{0,4,-13,99};
std::vector<Thing> things;
auto make_thing = [](auto&& i){return Thing(i);};
std::transform(numbers.begin(), numbers.end(), std::back_inserter(things), make_thing);
}
对于第一个代码示例,只需使用 lambda:
std::transform(numbers.begin(), numbers.end(), std::back_inserter(things), [](int i){ return Thing(i);});
这是最好的代码执行方式。大家会明白的。
构造函数不能用作 UnaryOperator,因为它return 不是一个值。
如果我有一个带有一元构造函数的 class,我能否以某种方式将该构造函数用作算法中的 UnaryOperator?即:
#include <algorithm>
#include <vector>
class Thing
{
public:
Thing(int i)
: m_i(i)
{}
int i() {
return m_i;
};
private:
int m_i;
};
int main() {
std::vector<int> numbers{0,4,-13,99};
std::vector<Thing> things;
std::transform(numbers.begin(), numbers.end(), std::back_inserter(things), Thing);
}
上面的代码行不通,下面的代码行得通,但我想知道是否有更好的方法:
#include <algorithm>
#include <vector>
class Thing
{
public:
Thing(int i)
: m_i(i)
{}
int i() {
return m_i;
};
private:
int m_i;
};
int main() {
std::vector<int> numbers{0,4,-13,99};
std::vector<Thing> things;
auto make_thing = [](auto&& i){return Thing(i);};
std::transform(numbers.begin(), numbers.end(), std::back_inserter(things), make_thing);
}
对于第一个代码示例,只需使用 lambda:
std::transform(numbers.begin(), numbers.end(), std::back_inserter(things), [](int i){ return Thing(i);});
这是最好的代码执行方式。大家会明白的。
构造函数不能用作 UnaryOperator,因为它return 不是一个值。