即。我有两种特殊类型:
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)
}
};
这是什么解决方案?
谢谢
马丁
答案 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;
一个缺点是声明对所有基本方法使用子句。优点是它只隐含的特殊性质,只选择允许解析(使用)的方法。
对于一个在某个地方忘记他的头的家伙的问题感到抱歉。