使用基于模板的构造函数构造std :: function

时间:2012-09-12 11:03:04

标签: c++ templates c++11 std-function

是否可以使用模板参数定义的类型的构造函数构造std::function

例如:

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

1 个答案:

答案 0 :(得分:9)

我不这么认为,因为构造函数没有名称,你不能对它们采用指针/引用,并且通常它们的行为与函数不同。

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

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

调用它会产生与使用表达式T()构造临时类型T相同的结果,但可能会产生不同的副作用。在真正的函数调用的情况下,在return语句中有一个额外的临时值,名义上将其复制/移动到返回值。实施可能会或可能不会消除额外的临时性。