). В качестве альтернативы, вы можете использовать «статический оператор if», который выясняет, действительно ли T1 является целочисленным типом, и, если это так, введите typedef T1 в IntType, если нет, введите typedef T2 в IntType.

аюсь использовать шаблон Curily Recurring Template Pattern (CRTP) и предоставляю дополнительные параметры типа:

template <typename Subclass, typename Int, typename Float>
class Base {
    Int *i;
    Float *f;
};
...

class A : public Base<A, double, int> {
};

Это, вероятно, ошибка, более подходящий суперклассBase<A, double, int> - хотя это несоответствие порядка аргументов не так очевидно, чтобы определить. Эту ошибку было бы легче увидеть, если бы я мог использовать name и значение параметров в typedef:

template <typename Subclass>
class Base {
    typename Subclass::Int_t *i;  // error: invalid use of incomplete type ‘class A’
    typename Subclass::Float_t *f;
};

class A : public Base<A> {
    typedef double Int_t;         // error: forward declaration of ‘class A’
    typedef int Double_t;
};

Тем не менее, это не компилируется в gcc 4.4, сообщенные ошибки приведены в виде комментариев выше - я думаю, причина в том, что перед созданием A ему нужно создать экземпляр базового шаблона, но это, в свою очередь, должно знать A.

Есть ли хороший способ передачи "именованных" параметров шаблона при использовании CRTP?

Ответы на вопрос(3)

Ваш ответ на вопрос