0

我有这个结构数组,其中一些运算符重载

struct xyz
{
  int x; float y;
};

std::vector<xyz> a1,a2,a3;

当我将其用作

a1 [ a2 [ i ] ] = a3 [ i ]

//by this I mean

//a1 [ a2 [ i ].x ].x = a3 [ i ].x
//a1 [ a2 [ i ].x ].y = a3 [ i ].y

我收到此错误“\OCL6D24.tmp.cl”,第 236 行:错误:表达式必须具有整数或枚举类型

我在 OpenCL 内核中使用它。但是这个问题类似于普通的 C++ 程序。我该如何解决这个问题?

更新:我认为我需要的东西是不可能的,尤其是在 OpenCL 内核的情况下。但我解决了我的问题。这是一个设计缺陷。

4

2 回答 2

1

您必须使用某种关联容器才能做到这一点。例如std::mapstd::unordered_map(on C++11)。std::vector仅支持使用整数类型进行索引(就像错误所说的那样)。

于 2013-02-14T09:41:08.290 回答
1

std::vector::operator[]将 size_t 作为输入,但您将对象传递xyz给它。这就是您的编译器拒绝您的代码的原因。

要解决您的代码,您可以重载operator int()以将对象隐式转换为整数:

struct xyz
{
  int x; float y;
  operator int()
  {
    return x;
  }
};

但是您需要确保返回值与向量中的正确索引相关。

或者使用一些关联容器std::unordered_map来代替。

于 2013-02-14T09:46:42.167 回答