Я создаю библиотеку матриц и пытаюсь использовать дизайн на основе политик . Итак, мои базовые классы - это классы, которые предоставляют метод хранения и некоторые функции доступа. У меня также есть матрица функций, которая предоставляет математические функции. Это отлично работает, но есть большая проблема с оператором * из-за возвращаемого типа. Я объясню это с помощью некоторого кода.
Базовый класс, который обеспечивает хранение стека:
template < typename T, unsigned int rows, unsigned int cols>
class denseStackMatrix {
public:
typedef T value_type;
private:
value_type grid[rows][cols];
const unsigned int rowSize;
const unsigned int colSize;
Затем у меня есть мой матричный класс, который обеспечивает математические функции:
template
class matrix : public MatrixContainer {
public:
typedef MatrixContainer Mcontainer;
matrix& operator +(const matrix&);
matrix& operator *(const matrix&);
оператор +
всегда работает, оператор *
работает только для квадратной матрицы.
Так что нам по-прежнему нужен один для всех матриц. И вот оно что
неправильно. Я уже пробовал несколько вещей, но ничего не работает.
Я ищу что-то подобное, с помощью c ++ 0x (использование
c ++ 0x не является обязательным)
вы заметите "???" :)
friend auto operator * (const matrix& matrix1, const matrix& matrix2)
-> decltype(matrix??>);
Пример проблемы
matrix > matrix1;
matrix > matrix2;
matrix > matrix3 = matrix1 * matrix2;
Здесь он будет жаловаться на тип, потому что он не соответствует ни одному из двух типов параметров. Но компилятор должен знать тип во время компиляции, и я не знаю, как его предоставить.
Я знаю, что есть другие варианты дизайна, но я действительно ищу решение для этого сценария ..
] Спасибо!