gpt4 book ai didi

c++ - Boost multi_array 范围编译

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:46 25 4
gpt4 key购买 nike

范围可用于对 Boost 多维数组 (multi_array) 进行切片。根据documentation有多种定义范围的方法,但并非所有方法都能编译。我在 Ubuntu 11.04 上使用 GCC 4.5.2。

#include <boost/multi_array.hpp>

int main() {
typedef boost::multi_array_types::index_range range;
range a_range;

// indices i where 3 <= i

// Does compile
a_range = range().start(3);

// Does not compile
a_range = 3 <= range();
a_range = 2 < range();

return 0;
}

编译器输出为:

ma.cpp: In function ‘int main()’:
ma.cpp:9:26: error: no match for ‘operator<=’ in ‘3 <= boost::detail::multi_array::index_range<long int, long unsigned int>()’
ma.cpp:10:25: error: no match for ‘operator<’ in ‘2 < boost::detail::multi_array::index_range<long int, long unsigned int>()’

知道如何编译它,或者缺少什么吗?

最佳答案

operator<operator<=这里调用的是模板;因此,为 Index 提供给所述运算符的值参数必须与 Index 的类型完全相同所提供范围的模板参数。

boost::multi_array_types::index_range::index type 最终归结为 std::ptrdiff_t 的 typedef ;鉴于您提供 int文字,显然适用于您的平台/配置,std::ptrdiff_t是除 int 之外的某种类型的 typedef (根据您的错误消息,它是 long )。

可移植的修复方法是将文字强制转换为正确的类型:

#include <boost/multi_array.hpp>

int main()
{
typedef boost::multi_array_types::index_range range;
typedef range::index index;

range a_range;
a_range = index(3) <= range();
a_range = index(2) < range();

index i(1);
a_range = i <= range();
}

关于c++ - Boost multi_array 范围编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6612148/

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