Здравствуйте, flаt, Вы писали:
F>Здравствуйте, SVV, Вы писали:
SVV>>прошу подсказать как написать этот some_template
F>Там куча способов есть. Но смысла это не имеет: http://rsdn.ru/forum/cpp/5493412.1Автор: jazzer
Дата: 28.02.14
предположим, есть такая штука:
template <class T>
inline void ReverseBytes(T &i_rVal)
{
BYTE *pBytesSrc = reinterpret_cast<BYTE *>(&i_rVal);
BYTE *pBytesRet = reinterpret_cast<BYTE *>(&i_rVal);
size_t uBytesToSwap = sizeof(T)>>1;
for (size_t i=0,j=sizeof(T)-1; i<uBytesToSwap; ++i, --j)
SwapBytes(pBytesRet[j], pBytesSrc[i]);
}
для 2 и 4 байтных типов есть быстрая реализация без циклов. фиксированное количество операций. можно конечно писать специализированную функцию для каждого двухбайтного типа, но проще ориентироваться на sizeof(T) и неважно как называется тип (в коде много typedef)
для такого варианта не сильно понятно как шаблон делать. что-то я слабовал в шаблонах. сегодня перечитывал мейерса, про размерность матрицы в шаблоне, но сдается мне там не о том что мне надо речь шла...
template<typename T, size_t size>
class SquareMatrix: private SquareMatrixBase {
public:
SquareMatrix() // присвоить указателю на данные
:SquareMatrixBase<t>(n, 0), // в базовом классе значение null
pData(new T(n*n)) // выделить память для данных матрицы,
{this->setDataPtr(pData.get();} // сохранить указатель на нее и передать
... // его копию базовому классу
private:
boost::scoped_array<T> pData; // о классе boost::scoped_array
}; //см. правило 13