Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 访问变量并返回不同类型时出错 #包括 #包括 #包括 模板结构重载:Ts。。。{使用Ts::运算符()…;}; 模板重载(Ts…)->重载; 类数据输出 { 公众: double create_data(){return 1.57;} }; 类数据\u输出\u二 { 公众: int create_data(){return 66;} }; int main() { 使用my_type=std::variant; std::矢量数据; auto my_lambda=重载{[](数据_输出&d){返回d.create_数据();}, [](数据输出){return d.create_data();}}; 数据向量放置回(数据输出{}); 数据向量放回(数据输出二{}); std::cout_C++_C++17 - Fatal编程技术网

C++ 访问变量并返回不同类型时出错 #包括 #包括 #包括 模板结构重载:Ts。。。{使用Ts::运算符()…;}; 模板重载(Ts…)->重载; 类数据输出 { 公众: double create_data(){return 1.57;} }; 类数据\u输出\u二 { 公众: int create_data(){return 66;} }; int main() { 使用my_type=std::variant; std::矢量数据; auto my_lambda=重载{[](数据_输出&d){返回d.create_数据();}, [](数据输出){return d.create_data();}}; 数据向量放置回(数据输出{}); 数据向量放回(数据输出二{}); std::cout

C++ 访问变量并返回不同类型时出错 #包括 #包括 #包括 模板结构重载:Ts。。。{使用Ts::运算符()…;}; 模板重载(Ts…)->重载; 类数据输出 { 公众: double create_data(){return 1.57;} }; 类数据\u输出\u二 { 公众: int create_data(){return 66;} }; int main() { 使用my_type=std::variant; std::矢量数据; auto my_lambda=重载{[](数据_输出&d){返回d.create_数据();}, [](数据输出){return d.create_data();}}; 数据向量放置回(数据输出{}); 数据向量放回(数据输出二{}); std::cout,c++,c++17,C++,C++17,Visit返回单一类型 您的代码要求它返回两种不同的类型 它不能这样做 现在,它返回的单一类型可能是两种类型的变体。但tht主要是在道路上踢罐子 /usr/include/c++/8.2.1/variant:836:43: error: invalid conversion from ‘std::__success_type<int>::type (*)(overload<main()::<lambda(data_output&)>, main()::&l

Visit返回单一类型

您的代码要求它返回两种不同的类型

它不能这样做

现在,它返回的单一类型可能是两种类型的变体。但tht主要是在道路上踢罐子

/usr/include/c++/8.2.1/variant:836:43: error: 
invalid conversion from ‘std::__success_type<int>::type (*)(overload<main()::<lambda(data_output&)>, main()::<lambda(data_output_two&)> >&, std::variant<data_output, data_output_two>&)’ 
{aka ‘int (*)(overload<main()::<lambda(data_output&)>, main()::<lambda(data_output_two&)> >&, std::variant<data_output, data_output_two>&)’}
to ‘double (*)(overload<main()::<lambda(data_output&)>, main()::<lambda(data_output_two&)> >&, std::variant<data_output, data_output_two>&)’ [-fpermissive]
     { return _Array_type{&__visit_invoke}; }
{[](数据输出&d)->std::variant{return d.create_data();},
[](data_output_two&d)->std::variant{return d.create_data();};
有了此功能,您必须重新访问才能打印:

{[](data_output& d)->std::variant<int,double> {return d.create_data();},
                          [](data_output_two& d)->std::variant<int, double> {return d.create_data();}};

std::visit([](auto&&x){std::coutvisit返回单个类型

您的代码要求它返回两种不同的类型

它不能这样做

现在,它返回的单一类型可能是两种类型的变体。但tht主要是在道路上踢罐子

/usr/include/c++/8.2.1/variant:836:43: error: 
invalid conversion from ‘std::__success_type<int>::type (*)(overload<main()::<lambda(data_output&)>, main()::<lambda(data_output_two&)> >&, std::variant<data_output, data_output_two>&)’ 
{aka ‘int (*)(overload<main()::<lambda(data_output&)>, main()::<lambda(data_output_two&)> >&, std::variant<data_output, data_output_two>&)’}
to ‘double (*)(overload<main()::<lambda(data_output&)>, main()::<lambda(data_output_two&)> >&, std::variant<data_output, data_output_two>&)’ [-fpermissive]
     { return _Array_type{&__visit_invoke}; }
{[](数据输出&d)->std::variant{return d.create_data();},
[](data_output_two&d)->std::variant{return d.create_data();};
有了此功能,您必须重新访问才能打印:

{[](data_output& d)->std::variant<int,double> {return d.create_data();},
                          [](data_output_two& d)->std::variant<int, double> {return d.create_data();}};

std::visit([](自动和&x){std::cout您是否希望
std::visit
的结果被强制为一个普通类型,如
double
?还是希望它返回一个
变量
?我添加了一些更详细的内容。我希望对象的异构容器,其成员函数可以返回不同的类型。但是kmdreko问您认为如何
std::visit的返回类型(my_lambda,data_vec[0])
是?@MooingDuck我希望它是我希望它调用的函数的返回类型。您是否希望
std::visit
的结果被强制为一个公共类型,比如
double
?或者您希望它返回一个
变量
?我添加了一些更详细的内容。我想要一个包含membe的对象的异构容器r函数可能返回不同的类型。但是kmdreko在问你认为std::visit(my_lambda,data_vec[0])
的返回类型是什么?@MooingDuck我希望它是我想要调用的函数的返回类型
std::visit([&](auto&&x){ std::cout<<my_lambda(x)<<"\n";}, data_vec[0] );