使用成员函数模板实现接口的函数
Implementing an interface's function using member function templates
我想知道是否可以像这样通过成员函数模板实现 "interface" 的函数:
struct VisitorI
{
virtual void Visit(int) = 0;
virtual void Visit(float) = 0;
};
struct VisitorC : public VisitorI
{
template<class T>
void Visit(T) { /*Assume Visit(T) has syntatically the same implemenation for each relevant T */}
};
template void VisitorC::Visit(int);
template void VisitorC::Visit(float);
int main()
{
VisitorC Visitor;
return 0;
}
上面的代码无法编译,因为 foo(int) 和 foo(float) 在 VisitorC 中被认为是纯虚拟的,所以我认为这是不可能的。我真的看不出有什么特别的理由不应该...?
干杯,
达米安
作为解决方法,您可以:
struct VisitorC : public VisitorI
{
virtual void Visit(int a) { Visit_impl(a); }
virtual void Visit(float a) { Visit_impl(a); }
private:
template<class T>
void Visit_impl(T) { /* ... */ }
};
我想知道是否可以像这样通过成员函数模板实现 "interface" 的函数:
struct VisitorI
{
virtual void Visit(int) = 0;
virtual void Visit(float) = 0;
};
struct VisitorC : public VisitorI
{
template<class T>
void Visit(T) { /*Assume Visit(T) has syntatically the same implemenation for each relevant T */}
};
template void VisitorC::Visit(int);
template void VisitorC::Visit(float);
int main()
{
VisitorC Visitor;
return 0;
}
上面的代码无法编译,因为 foo(int) 和 foo(float) 在 VisitorC 中被认为是纯虚拟的,所以我认为这是不可能的。我真的看不出有什么特别的理由不应该...?
干杯, 达米安
作为解决方法,您可以:
struct VisitorC : public VisitorI
{
virtual void Visit(int a) { Visit_impl(a); }
virtual void Visit(float a) { Visit_impl(a); }
private:
template<class T>
void Visit_impl(T) { /* ... */ }
};