gpt4 book ai didi

c++ - 如何在 STL 容器和成员函数调用中存储模板化对象

转载 作者:太空狗 更新时间:2023-10-29 19:53:33 26 4
gpt4 key购买 nike

假设你有一个类似的类

template<class T>
struct A {
void foo() {
// Need access to "T" here
typedef typename someTrait<T>::someType T2;
}
};

并且您想使用容器(可能是 STL)“注册”(或存储)类的实例(或指向它的指针),以便稍后调用 foo()所有注册实例的方法。

由于要存储使用不同模板参数实例化的实例(A<int>A<float>,...),显然不能使用 std::vector并存储实例或指向它的指针。我能想象的是制作方法 static并将函数指针存储到 void foo() ,比如:

 void static foo();

typedef void (* fooPtr)(void);
std::vector<fooPtr>

但不知何故,我觉得这不是很符合 C++11 风格。有没有引入包装类之类的好的解决方案?

引入基类并使用动态转换会引入对 RTTI 的依赖性, 正确的?我想避免依赖 RTTI .

在 C++11 中如何做到这一点? (我不想引入额外的依赖项,例如链接到 Boost 或依赖于 RTTI。)

感谢您的意见!

最佳答案

也许你可以只使用虚拟方法?这也适用于 C++03。

struct ABase {
virtual void foo() = 0;
};

template<class T>
struct A : ABase {
virtual void foo() override {
// Access to "T" here
}
};

...

std::vector<std::unique_ptr<ABase>> vec;
vec.emplace_back(new A<int>());
vec.emplace_back(new A<float>());

for (auto& p_a : vec)
p_a->foo();

关于c++ - 如何在 STL 容器和成员函数调用中存储模板化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13065271/

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