Шаблоны C ++ 11, определяющие тип возврата

Я создаю библиотеку матриц и пытаюсь использовать дизайн на основе политик . Итак, мои базовые классы - это классы, которые предоставляют метод хранения и некоторые функции доступа. У меня также есть матрица функций, которая предоставляет математические функции. Это отлично работает, но есть большая проблема с оператором * из-за возвращаемого типа. Я объясню это с помощью некоторого кода.

Базовый класс, который обеспечивает хранение стека:

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;

Здесь он будет жаловаться на тип, потому что он не соответствует ни одному из двух типов параметров. Но компилятор должен знать тип во время компиляции, и я не знаю, как его предоставить.

Я знаю, что есть другие варианты дизайна, но я действительно ищу решение для этого сценария ..

] Спасибо!

14
задан Xeo 9 February 2012 в 23:18
поделиться