gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:49:48 25 4
gpt4 key购买 nike

我可以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”是将 1 替换为 2,这告诉我无论 bind 返回的类型是什么,它都不会t 复制输入。为什么不?有没有办法强制复制?

最佳答案

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

关于c++ - std::bind 返回的类型可以默认构造吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28394561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com