gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 15:22:45 25 4
gpt4 key购买 nike

如何在以下代码中实现通用案例中的抽象基类。该代码是从我正在处理的库中简化而来的。因此 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);
}

非常感谢。

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

最佳答案

下面的例子呢?

首先,我认为您需要在 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]
}

关于c++ - 在可变上下文中使用抽象类时如何实现抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39938270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com