如何在可变上下文中使用抽象类时实现抽象方法
How to implement an abstract method when abstract class is used in a variadic context
如何在以下代码中实现泛型情况下的抽象基类。代码是从我正在开发的一个库简化的。因此,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
中定义virtual
的send()
方法(如果你想要它是纯虚的)。
接下来,您可以声明一个中间模板类(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]
}
相关文章:
- 使用抽象类的类和实现此抽象类的创建对象
- GMock - 用另一个实现模拟抽象类
- 确保派生的类实现至少是来自抽象类(C )的两种方法之一
- 有没有办法实现从 c++ 中其他抽象类多重继承的抽象类?
- 在C 抽象类中实现回调(对于C库)为纯虚拟
- C++迭代器:抽象类的迭代器可以作为嵌套类实现吗
- 如何创建抽象类的内联实现
- c++抽象类在另一个基类中的实现
- 不带模板参数的抽象类的实现
- Vector使用抽象类C++实现的优先级队列
- 类中的多态函数,实现抽象类
- 是否可以在C++/CLR中实现一个用C#声明的抽象类
- 在C++中实现简单的Java程序(抽象类)
- C++ 抽象类是否应该为(虚拟)析构函数提供实现
- 如何正确实现抽象类
- C++:使用模板化类来实现抽象类
- 在C++中,一个抽象类可以在没有纯虚拟函数的情况下实现吗
- 实例在其他地方实现的抽象类
- 抽象类方法用其他基类的子类实现
- 允许派生类从基抽象类实现单个纯虚函数