我正在尝试存储和操作具有不同参数类型的模板类对象列表;模板类有两个参数化方法,一个返回参数类型,一个void接受它作为输入。
更具体地说,我有一个定义如下的模板类:
template<typename T>
class Test
{
public:
virtual T a() = 0;
virtual void b(T t) = 0;
};
以及它的不同规格,例如:
class TestInt : public Test<int>
{
public:
int a() {
return 1;
}
void b(int t) {
std::cout << t << std::endl;
}
};
class TestString : public Test<std::string>
{
public:
std::string a() {
return "test";
}
void b(std::string t) {
std::cout << t << std::endl;
}
};
我希望能够将两者的不同对象存储在一个列表中,TestInt
然后TestString
键入并循环调用一种方法作为另一种方法的输入,如下所示:
for (auto it = list.begin(); it != list.end(); ++it)
(*it)->b((*it)->a());
我已经调查过了boost::any
,但我无法将迭代器强制转换为特定的类,因为我不知道每个存储对象的具体参数类型。也许这不能用静态类型语言如 C++ 来完成,但我想知道是否有办法解决它。
为了完整起见,我要补充一点,我的总体目标是开发一个“参数化观察者”,即能够定义具有不同参数的观察者(与观察者模式一样):Test
类是观察者类,而我试图正确定义的不同类型的观察者的列表存储在主题类中,它通过两种方法a()
和b()
.