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

How to implement an abstract method when abstract class is used in a variadic context

本文关键字:抽象类 实现 抽象方法 上下文      更新时间:2023-10-16

如何在以下代码中实现泛型情况下的抽象基类。代码是从我正在开发的一个库简化的。因此,int和double的显式实现不是一种选择。

template <typename T>
struct Foo
{
  virtual void send(T t) = 0;
};
template <typename...T>
struct Bar : Foo<T>...
{
  void send(T t) override { // does not compile because 
                            // abstract method not implemented
  }
};
int main() {
  // example usage
  Bar<int, double> b;
  b.send(1);
  b.send(2.3);
}

提前感谢。

Edit:添加virtual to abstract方法

下面的例子呢?

首先,我认为你需要在Foo中定义virtualsend()方法(如果你想要它是纯虚的)。

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

最后,您可以使用Bar中的模板send()方法来选择正确的虚拟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]
 }