Псевдоним специализации шаблона

У меня есть проблема, которую я придумал недавно. На самом деле я думаю, что это не может быть решено, как мне бы хотелось, но было бы очень удобно, если бы это было возможно. Так или иначе, вот проблема:

Я приведу вам пример, который я видел несколько дней назад на этом форуме, так как с ним будет легче объяснить. Допустим, я пытаюсь создать структуру Tensor таким образом :

template <int N>
struct Tensor
{
    Tensor<N - 1> x;
    Tensor<N - 1> y;
    Tensor<N - 1> z;
};

. Чтобы избежать бесконечной рекурсии, мне пришлось бы написать специализацию шаблона для N = 1.

template<>
struct Tensor<1>
{
    double x;
    double y;
    double z;
};

На самом деле, когда N = 1, этот Tensor на самом деле является Вектор (физический ). Допустим, у меня уже есть структура Vector, определенная таким образом :

struct Vector
{
    double x;
    double y;
    double z;
};

. Эта структура точно такая же, как Tensor<1>. Поскольку структура Vector уже существовала и, допустим, я не реализовал ее сам, я хотел бы иметь возможность сделать структуру Tensor<1> псевдонимом структуры Vector. Так же, как определение типа. Итак, я хотел бы сделать это таким образом:

// C++03
typedef Vector Tensor<1>;

// or C++11
using Tensor<1> = Vector;

Таким образом, Tensor<1> и Vector были бы одной и той же структурой, поэтому я мог бы использовать одну вместо другой в программе, где бы я ни хотел, и у меня не было бы написать одну и ту же структуру дважды.

Однако на самом деле невозможно определить специализацию шаблона таким образом. Если бы это было так, я бы не задавал здесь вопрос.

Примечание.:Я знаю, что предыдущий пример не очень хорош, поскольку мы все еще можем сделать это.:

using Vector = Tensor<1>;

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

using Circle<2> = Hypersphere<2>;

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

6
задан Morwenn 3 May 2012 в 20:28
поделиться