基于模板与构造函数构造的std ::功能(Construct std::function with

2019-06-28 06:10发布

是否有可能构造std::function通过一个模板参数定义的类型的构造函数?

例如:

template <typename T>
bool registerType()
{
    const std::function<T()> func = &T::T; //I know this doesn't work
    //...
}

Answer 1:

我不这么认为,因为构造函数没有名字,你不能把一个指针/引用他们,一般他们不循规蹈矩很喜欢的功能。

你可以使用lambda初始化std::function具有相同签名:

const std::function<T()> func = [](void) { return T(); } // or something like that

调用它产生相同的结果作为使用表达式T()来构造一个临时类型T ,但有可能进行不同的副作用。 在一个真正的函数调用的情况下,有一个在return语句,它名义上是复制一个额外的临时/移动到返回值。 实施可以或不可以的的Elid额外暂时的。



文章来源: Construct std::function with a constructor based on template