xml*_*lmx 12 c++ constructor bind
无需过度解释.以下代码不言而喻:
struct X
{
X(int n){}
};
int main()
{
std::vector<int> src;
std::vector<X> dest;
// Below is not valid in current C++, but that is just what I want.
transform(src.begin(), src.end(), back_insert(dest), std::bind(&X::X, _1));
}
Run Code Online (Sandbox Code Playgroud)
构造函数接受一些参数并返回构造函数的类的对象.
构造函数看起来像一个函数,就像一个函数,并且只是一个函数.
所以,我认为std :: bind应该统一处理构造函数和其他可调用对象.
但是,如何扩展功能模板"bind"来实现呢?
vis*_*tor 15
由于X
是隐式可构造的int
,因此简单的副本应该实现转换.
copy(src.begin(), src.end(), std::back_inserter(dest));
Run Code Online (Sandbox Code Playgroud)
甚至使用vector的构造函数:
std::vector<X> dest(src.begin(), src.end());
Run Code Online (Sandbox Code Playgroud)
在一般情况下,boost的lambda库有一个constructor
仿函数.
#include <boost/lambda/bind.hpp>
#include <boost/lambda/construct.hpp>
...
using namespace boost::lambda;
transform(src.begin(), src.end(), std::back_inserter(dest), bind(constructor<X>(), _1));
Run Code Online (Sandbox Code Playgroud)
在这种特殊情况下,绑定可能不是必需的,因为构造函数只有一个参数.
我不知道是否有更酷的 Boost方式,但你可以这样写:
class Builder
{
X operator() (int value) const { return X(value); }
};
transform(src.begin(), src.end(), back_insert(dest), Builder());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5820 次 |
最近记录: |