Совпадение двойной пустой строки Грамматика Атома

Хотя coppro упомянул два решения уже, и Аноним объяснил второй, мне потребовалось некоторое время, чтобы понять первый. Возможно, следующий код поможет кому-то споткнуться по этому сайту, который по-прежнему занимает высокое место в google, как и я. Пример (передача вектора / массива / одиночного элемента числового Т как dataT, а затем доступа к нему через [] или непосредственно), конечно, несколько надуманна, но должна проиллюстрировать, как вы действительно можете приблизиться к частичному специализации функции-члена, обернув ее в частично специализированном классе.

/* The following circumvents the impossible partial specialization of 
a member function 
actualClass<dataT,numericalT,1>::access
as well as the non-nonsensical full specialisation of the possibly
very big actualClass. */

//helper:
template <typename dataT, typename numericalT, unsigned int dataDim>
class specialised{
public:
  numericalT& access(dataT& x, const unsigned int index){return x[index];}
};

//partial specialisation:
template <typename dataT, typename numericalT>
class specialised<dataT,numericalT,1>{
public:
  numericalT& access(dataT& x, const unsigned int index){return x;}
};

//your actual class:
template <typename dataT, typename numericalT, unsigned int dataDim>
class actualClass{
private:
  dataT x;
  specialised<dataT,numericalT,dataDim> accessor;
public:
  //... for(int i=0;i<dataDim;++i) ...accessor.access(x,i) ...
};
0
задан user2662833 18 January 2019 в 03:22
поделиться