【发布时间】:2012-10-25 09:12:19
【问题描述】:
假设你有一个像
这样的类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。)
感谢您的意见!
【问题讨论】:
-
Obviously one can't use a std::vector since the class is templated是不正确的陈述。您需要对象向量还是函数指针向量? -
你是对的。那是一个草率的说法。我想我的意思是不同类型的
vector由于不同的实例化类模板是不可能的。函数指针就够了。
标签: c++ templates stl c++11 member-function-pointers