假设你有一个类似的类
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/