как записать cast-to-reference-to-array оператор для класса?

У меня есть следующий класс:

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;
1
задан Pooria 20 July 2010 в 18:44
поделиться

2 ответа

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;  

Обычно в этом нет необходимости, так как оператор subscripting покрывает большинство потребностей:

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;
4
ответ дан 2 September 2019 в 22:54
поделиться

Вы могли бы использовать функциональность boost::array, также найденную в TR1 и, по расширению, C++0x.

-2
ответ дан 2 September 2019 в 22:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: