Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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++ 如何将Boost.MultiArray的二维视图作为参数引入函数?_C++_Boost_C++11_Type Inference_Boost Multi Array - Fatal编程技术网

C++ 如何将Boost.MultiArray的二维视图作为参数引入函数?

C++ 如何将Boost.MultiArray的二维视图作为参数引入函数?,c++,boost,c++11,type-inference,boost-multi-array,C++,Boost,C++11,Type Inference,Boost Multi Array,我有一个双倍的3D数组。我想写一个简单的通用函数来打印它的2D切片 代码: #包括 #包括 模板//多阵列概念的任何模型 void printFloatMatrix(类型名M::模板数组\视图::类型矩阵){ 使用std::printf; 用于(自动行:矩阵(&W){ 用于(自动和元素:行){ printf(“%5.3f”,elem); } printf(“\n”); } } int main(){ typedef boost::多数组数据; 数据测试矩阵{data_t::extent_gen(

我有一个双倍的3D数组。我想写一个简单的通用函数来打印它的2D切片

代码:

#包括
#包括
模板//多阵列概念的任何模型
void printFloatMatrix(类型名M::模板数组\视图::类型矩阵){
使用std::printf;
用于(自动行:矩阵(&W){
用于(自动和元素:行){
printf(“%5.3f”,elem);
}
printf(“\n”);
}
}
int main(){
typedef boost::多数组数据;
数据测试矩阵{data_t::extent_gen()[10][10][2]};
// ...
使用boost::索引;
使用boost::多数组类型::索引范围;
printFloatMatrix(测试矩阵[索引[索引范围()][索引范围()][0]]);
}
对于GCC,这会产生错误消息:

test.cpp: In function ‘int main()’:
test.cpp:24:79: error: no matching function for call to ‘printFloatMatrix(boost::multi_array_ref<double, 3u>::array_view<2u>::type)’
test.cpp:24:79: note: candidate is:
test.cpp:5:6: note: template<class M> void printFloatMatrix(typename M::array_view<2u>::type)
test.cpp:在函数“int main()”中:
test.cpp:24:79:错误:调用“printFloatMatrix(boost::multi_array\u ref::array\u view::type)”时没有匹配的函数
测试。cpp:24:79:注:候选人是:
test.cpp:5:6:注意:模板void printFloatMatrix(typename M::array\u view::type)
为什么会出错

为什么不将
M
推断为
boost::multi_array_ref


我如何编写原型?

< p>我无法解释C++类型推理失败的确切原因,但是将函数原型改为<代码>模板空隙PrttFrastMatrix(const m and Matrix)< /C> >。< /P> 不过,该原型现在已经毫无用处了。很有可能它将来会咬我。随着概念的出现,这种情况有望得到解决,或者也可以通过静态断言解决


多亏了Freenode上的
##c++

每当你有
typename X::Y
,你就得到了一个所谓的“不可推断的上下文”,这意味着不能从该参数的传递参数推断出模板参数。您需要在调用站点指定类型,更改不可推断的上下文(就像您在这里所做的),或者提供另一个允许模板参数推断的参数。这必须与模板的图灵完整性和停止问题有关。谢谢,现在我明白了。可能是
test.cpp: In function ‘int main()’:
test.cpp:24:79: error: no matching function for call to ‘printFloatMatrix(boost::multi_array_ref<double, 3u>::array_view<2u>::type)’
test.cpp:24:79: note: candidate is:
test.cpp:5:6: note: template<class M> void printFloatMatrix(typename M::array_view<2u>::type)