gpt4 book ai didi

c++ - 如何创建一个 vector 来保存同一模板类的所有类型的元素

转载 作者:行者123 更新时间:2023-11-28 05:24:47 25 4
gpt4 key购买 nike

我有一个模板类:

template<typename A, typename B, typename C>
class blah{...};

我想创建一个 std::vector<> 来保存任何可能的 blah 对象。

例如

blah<float, int, string>

blah<string, string, char>

那些 blah 对象,虽然起源于同一个模板类,但本质上是不同的类型。我如何声明一个 std::vector 来保存它们?

我考虑过使用 std::variant,但我不能,因为要使用它,我需要枚举所有可能的模板参数组合:

std::variant<all possible template parameter combinations>

我考虑过使用 std::any,但我不能,因为我不知道如何从 std::any 类型转换回正确的类型?

我考虑过使用基类:

template<typename A, typename B, typename C>
class blah : public blah_base
{...};

并像这样声明一个 vector :

std::vector<blah_base*>

但是,我仍然不知道如何将 blah_base* 的类型转换回正确的类型?

最佳答案

基本上,您需要的是多态性。您正在探索的所有选项都是多态性,这是解决此问题的最佳方法。但是,你说这个和其他变体:

I don't know how to type cast from blah_base* back to the right type

如果您发现自己需要这样做,那您就做错了。拥有 std::vector<blah<...>> 是没有意义的,或者你的 blahs 都需要满足 blah_base 契约。

你可以用虚函数解决这个问题:

class blah_base {
public:
virtual void foo() = 0;
};

然后,不必告诉 blah 是哪种类型你有,你只需调用适当的foo做你想做的事情的功能。

关于c++ - 如何创建一个 vector 来保存同一模板类的所有类型的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40780391/

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