如何为类编写一个cast-to-reference-to-array运算符?

时间:2010-07-20 18:44:43

标签: c++ operators type-conversion casting

我有以下课程:

template <size_t size>
class Araye{
 public:
  Araye(int input[]){
   for (int i=0;i<size;i++)
    araye[i]=input[i];
  }
  int araye[size];
};

我应该如何为这个类编写一个cast-to-reference-to-array运算符,以便以下工作:

int adad[3]={1,2,3};
Araye<3> araye(adad);
int (&reference)[3]=araye;

2 个答案:

答案 0 :(得分:4)

template <size_t size> class Araye {
public:
    typedef int (&array_ref)[size];    
    operator array_ref () { return araye; }
    // ...

identity(感谢约翰内斯):

operator typename identity<int[size]>::type &() { return araye; }

这样你的例子有效,但我更喜欢以下声明:

Araye<3>::array_ref reference = araye;  

通常不应该这样,因为下标运营商应该满足大多数需求:

int& operator[](size_t i) { return araye[i]; }

请注意,如果您可以将课程限制为聚合,则可以将示例缩短为以下内容:

template <size_t size> struct Araye {
    int araye[size];
    typedef int (&array_ref)[size];    
    operator array_ref () { return araye; }
};

Araye<3> araye = {1,2,3};
Araye<3>::array_ref reference = araye;

答案 1 :(得分:-2)

您可以使用boost :: array功能,也可以在TR1和扩展C ++ 0x中找到。