std :: bind返回的类型可以默认构造吗?

乔纳森·H

我可以typedef返回std::bind表达式的类型,但是显然编译器对我调用此类型的默认构造函数不满意。相反,我必须首先传递与我完全相同的参数std::bind(请参见下文)。为什么?我做错了吗?

#include <iostream>
#include <functional>

#define x_plus_one(T) std::bind<T>( f_plus<T>(), std::placeholders::_1, T(1) )

template <class T>
struct f_plus
{
    inline T operator() ( const T& a, const T& b ) const
        { return a + b; }
};

template <class T>
using x_plus_one_type = decltype( x_plus_one(T) );

int main()
{
    auto f = x_plus_one(double);
    std::cout<< f(3.2) << "\n";

    // auto g = x_plus_one_type<double>(); ==> fails, no matching constructor
    auto g = x_plus_one_type<double>( f_plus<double>(), std::placeholders::_1, 1 ); // but this works?!
    std::cout<< g(3.2) << "\n";
}

我还尝试传递一个f_minus函数对象,并交换占位符和1,但是编译器不喜欢它,这确实使我感到困惑。唯一起作用的小“ hack”是替换1which 2,这告诉我无论返回的类型bind是什么,它都不会复制输入。为什么不?有没有办法强制复制?

StenSoft

std::bind未指定返回的类型因此,未指定是否可以通过调用以外的任何方式来构造它std::bind您可以使用std::unique_ptrboost::optional来具有非构造的值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

默认的std :: list <int>构造函数可以抛出吗?

来自分类Dev

std :: bind的返回类型隐式转换为两个不同的显式构造函数

来自分类Dev

std :: bind的返回类型隐式转换为两个不同的显式构造函数

来自分类Dev

std :: isfinite(IntegralType)可以返回false吗?

来自分类Dev

协程可以返回std :: future吗?(无法找到此协程的promise类型)

来自分类Dev

默认在std :: variant中构造所有类型,并将它们放入std :: vector中

来自分类Dev

std :: exception_ptr复制构造函数可以抛出吗?

来自分类Dev

为什么未指定std :: bind的返回类型?

来自分类Dev

如何推导std :: bind对象的返回类型供模板使用?

来自分类Dev

std :: bind与类型别名

来自分类Dev

应该std :: function分配忽略返回类型吗?

来自分类Dev

普通的默认可构造std :: optional和std :: variant

来自分类Dev

std::string::c_str() 可以返回 nullptr 吗?

来自分类Dev

确定std :: function的返回类型

来自分类Dev

可以std ::积累投掷吗?

来自分类Dev

是否可以让“命名构造函数”返回私有构造的,不可移动的,不可复制的std :: optional <T>?

来自分类Dev

我可以返回std :: thread

来自分类Dev

是否有可能实际上将std :: bind的返回值强制转换为std :: function而不进行构造?

来自分类Dev

std :: hash <std :: string>可以为不同的字符串返回相同的值吗?

来自分类Dev

为什么clang使用libstdc ++删除包含std :: optional的类型上的显式默认构造函数?

来自分类Dev

从T *指针构造std :: vector <T>吗?

来自分类Dev

调用std :: bind使用哪种类型

来自分类Dev

可以发布默认构造的DDS主题类型吗?

来自分类Dev

为什么std :: cbegin返回与std :: begin相同的类型

来自分类Dev

从std :: variant到std :: visit的可能类型返回值

来自分类Dev

是否可以从std :: bind对象访问参数?

来自分类Dev

返回复合类型时,`std :: move`对象进入构造函数?

来自分类Dev

std :: async可以调用std :: function对象吗?

来自分类Dev

std :: byte可以代替std :: aligned_storage吗?

Related 相关文章

  1. 1

    默认的std :: list <int>构造函数可以抛出吗?

  2. 2

    std :: bind的返回类型隐式转换为两个不同的显式构造函数

  3. 3

    std :: bind的返回类型隐式转换为两个不同的显式构造函数

  4. 4

    std :: isfinite(IntegralType)可以返回false吗?

  5. 5

    协程可以返回std :: future吗?(无法找到此协程的promise类型)

  6. 6

    默认在std :: variant中构造所有类型,并将它们放入std :: vector中

  7. 7

    std :: exception_ptr复制构造函数可以抛出吗?

  8. 8

    为什么未指定std :: bind的返回类型?

  9. 9

    如何推导std :: bind对象的返回类型供模板使用?

  10. 10

    std :: bind与类型别名

  11. 11

    应该std :: function分配忽略返回类型吗?

  12. 12

    普通的默认可构造std :: optional和std :: variant

  13. 13

    std::string::c_str() 可以返回 nullptr 吗?

  14. 14

    确定std :: function的返回类型

  15. 15

    可以std ::积累投掷吗?

  16. 16

    是否可以让“命名构造函数”返回私有构造的,不可移动的,不可复制的std :: optional <T>?

  17. 17

    我可以返回std :: thread

  18. 18

    是否有可能实际上将std :: bind的返回值强制转换为std :: function而不进行构造?

  19. 19

    std :: hash <std :: string>可以为不同的字符串返回相同的值吗?

  20. 20

    为什么clang使用libstdc ++删除包含std :: optional的类型上的显式默认构造函数?

  21. 21

    从T *指针构造std :: vector <T>吗?

  22. 22

    调用std :: bind使用哪种类型

  23. 23

    可以发布默认构造的DDS主题类型吗?

  24. 24

    为什么std :: cbegin返回与std :: begin相同的类型

  25. 25

    从std :: variant到std :: visit的可能类型返回值

  26. 26

    是否可以从std :: bind对象访问参数?

  27. 27

    返回复合类型时,`std :: move`对象进入构造函数?

  28. 28

    std :: async可以调用std :: function对象吗?

  29. 29

    std :: byte可以代替std :: aligned_storage吗?

热门标签

归档