您可以将构造函数用作 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 不是一个值。