从专门的模板化基类继承并调用正确的方法

时间:2010-08-26 14:34:28

标签: c++ templates

即。我有两种特殊类型:

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 个答案:

答案 0 :(得分:3)

add()似乎不依赖于任何模板参数(它不是“依赖名称”),因此编译器不会在模板化基类中搜索它。

使编译器明确add()应该是成员函数/从属名称的一种方法是在使用函数时明确指定this->

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

this隐式依赖于模板参数,这使得add成为在模板化基类中查找的从属名称。

另请参阅this entry of the C++ FAQ lite以及下一个/上一个。

答案 1 :(得分:1)

使用“using base method”子句,如:

using base::add;

一个缺点是声明对所有基本方法使用子句。优点是它只隐含的特殊性质,只选择允许解析(使用)的方法。

对于一个在某个地方忘记他的头的家伙的问题感到抱歉。