如何在可变参数上下文中使用抽象类时实现抽象方法

时间:2016-10-08 23:02:13

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

如何在以下代码中实现通用案例中的抽象基类。代码从我正在处理的库中简化。因此,int和double的显式实现不是一个选项。

::ffff:192.168.1.56

非常感谢提前。

编辑:添加虚拟到抽象方法。

1 个答案:

答案 0 :(得分:6)

以下示例如何?

首先,我认为您需要在virtual中定义send() Foo方法(如果您希望它是纯虚拟的)。

接下来,您可以声明一个中间模板类(Foo2)来实现override send()

最后,您可以使用send()中的模板Bar方法选择正确的虚拟send()方法。

#include <iostream>

template <typename T>
struct Foo
 { virtual void send(T t) = 0; };

template <typename T>
struct Foo2 : Foo<T>
 {
   void  send(T) override
    { std::cout << "sizeof[" << sizeof(T) << "] " << std::endl; }
 };

template <typename...T>
struct Bar : Foo2<T>...
 {
   template <typename U>
   void send (U u)
    { Foo2<U>::send(u); }
 };

int main()
 {
   Bar<int, double> b;

   b.send(1);    // print sizeof[4]
   b.send(2.3);  // print sizeof[8]
 }