使用模板生成纯虚拟基类方法

时间:2015-05-03 07:12:06

标签: c++ templates c++11 pure-virtual

这可能听起来很奇怪,我可能不得不在某些时候重构我的代码,但我需要使用模板函数生成纯虚基类方法。它是否适用于C ++ 11(可变参数模板?)?

示例:

struct I
{
    virtual void foo(int) = 0;
    virtual void foo(float) = 0;
};

struct S : public I
{
    template<typename T>
    void foo(T t) { /*do the same symbolic stuff on t*/ } 
};

int main()
{
    S s;
    s.foo(0);
    s.foo(0.0f);
    return 0;
}

发出以下错误(铿锵声):

main.cpp:65:7: error: variable type 'S' is an abstract class
    S s;
      ^
main.cpp:53:18: note: unimplemented pure virtual method 'foo' in 'S'
    virtual void foo(int) = 0;
                 ^
main.cpp:54:18: note: unimplemented pure virtual method 'foo' in 'S'
    virtual void foo(float) = 0;
                 ^
1 error generated.

2 个答案:

答案 0 :(得分:4)

你不能这样做。

模板方法的签名与非模板方法不同。

您无法使用虚拟模板方法。

答案 1 :(得分:2)

您不能直接执行此操作,但您可以使用转发器来实现通用:

struct S : public I
{
private:
    template<typename T>
    void foo_impl(T t) { /*do the same symbolic stuff on t*/ } 
public:
    virtual void foo(int v) { foo_impl(v); }
    virtual void foo(float v) { foo_impl(v); }
};