Унаследовать от специализированного шаблонного базового класса и вызвать правильный метод - PullRequest
1 голос
/ 26 августа 2010

Т.е. я получил 2 специализированных типа:

template <class Type, class Base> struct Instruction {};

для выбора во время компиляции соответствующего типа из списка типов.

например:

template <class Base> struct Instruction<Int2Type<Add_Type>, Base > 
{
   void add() {}
};

template <class Base> struct Instruction<Int2Type<Mul_Type>, Base > :
       Instruction<Int2Type<Add_Type>, Base >
{
   void mul() 
   {
      add(); ???? <== not working (not resolved)
   }
};

Какое решение для этого?

Спасибо

Мартин

Ответы [ 2 ]

3 голосов
/ 26 августа 2010

add() не зависит ни от каких параметров шаблона (это не «зависимое имя»), поэтому компилятор не ищет его в шаблонном базовом классе.

Один из способов прояснить компилятору, что add() должен быть функцией / зависимым именем, - это явно указать this-> при использовании функции:

void mul() 
{
   this->add();
}

this неявно зависит от параметров шаблона, что делает add зависимым именем, которое ищется в шаблонном базовом классе.

См. Также эту запись C ++ FAQ lite и следующие / предыдущие.

1 голос
/ 26 августа 2010

Получил с помощью предложения "using base method", например:

using base::add;

Одним из недостатков является декларация об использовании предложений для всех базовых методов. Преимущество заключается в том, что он подразумевает выбор только тех методов, которые разрешены для разрешения (использования).

Извините за вопрос о чуваке, который где-то забывает голову.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...