Обобщение типов - PullRequest
       5

Обобщение типов

2 голосов
/ 16 июля 2010

Мне нужно обобщить определение типа C ++, чтобы мне не нужно было копировать и вставлять много кода. Я сериализирую блиц-массивы с использованием boost, и я определяю свои собственные методы загрузки и сохранения и должен делать это на основе параметров шаблона. В основном я не знаю, как обобщить

typedef blitz::Array<double, 2> my_Matrix; 

для тензоров более высокого порядка, т. Е. Я хочу обобщить вышеприведенное, чтобы оно заняло 1,2, .., n и, если возможно, сделайте то же самое для типа.

Полагаю, я ищу что-то вроде шаблона typedef.

Ответы [ 3 ]

4 голосов
/ 16 июля 2010

Не знаю много о блиц-массиве, но вы должны быть в состоянии поместить typedef в шаблонную структуру.Например, что-то вроде:

template<int N>
struct Matrix
{
    typedef blitz::Array<double,N> Type;
};

Используйте вот так Matrix<3>::Type.

Что касается вашего другого вопроса относительно сериализации, посмотрите документацию для массива:

http://www.oonumerics.org/blitz/manual/blitz02.html

похоже, что вы можете просто заменить строки * проверка cols на размер вызовом size ().Метод data () должен по-прежнему работать для матриц ранга> 2.

0 голосов
/ 16 июля 2010

typedef на самом деле просто создает другое имя для чего-то.Это не совсем похоже на #define, но это близко.Будучи просто другим именем, вы не можете сделать с ними ничего такого, чего не могли бы сделать с точным именем, которое они заменяют.

Что вы могли бы сделать, так это пройти весь путь и использовать #define.Вот так:

#define my_Matrix(X) blitz::Array<X>

Лично я ненавижу препроцессор и предпочел бы, чтобы его убрали с языка.

0 голосов
/ 16 июля 2010

C ++ 0x имеет это:

template <size_t N>
using MyMatrix<N> = blitz::Array<double,N>;

Однако вам все равно понадобится шаблонный метод для load и save.

...