如何在以下代码中实现通用案例中的抽象基类。代码从我正在处理的库中简化。因此,int和double的显式实现不是一个选项。
::ffff:192.168.1.56
非常感谢提前。
编辑:添加虚拟到抽象方法。
答案 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]
}