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
Visit返回单一类型 您的代码要求它返回两种不同的类型 它不能这样做 现在,它返回的单一类型可能是两种类型的变体。但tht主要是在道路上踢罐子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
/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] );