实现getIterator的最佳方法是什么?根据条件,我想返回相应的迭代器.
// global variables
vector<int> myVector;
set<int> mySet;
vector<int>/set<int>::iterator getIterator(bool someCondition) {
if (someCondition) return mySet.begin();
else return myVector.begin();
}
请反对“不要使用全局变量”等“明智”的回答.我只是想知道是否有一种方法来“概括”set和vector迭代器,这个例子只是为了简单起见.
干杯
解决方法:
简短的回答是,你做不到. C是一种静态类型的语言.这意味着函数的类型或方法的返回值是在编译时声明的,而不是在运行时声明的.
其他语言,例如Perl,是动态类型的. Perl函数有时可以返回标量值,如整数.其他时候它可以返回引用(指针),列表或散列(std :: vector或std :: map).但是C不会这样.
因此,如果您需要编写动态类型的代码,则需要使用除C之外的其他语言.
你可以在这里做的唯一事情就是在C中声明这个函数返回一些可以转换为任何一个的类型.
例如:
class return_value {
public:
enum { vector, set} type_t;
type_t type;
std::vector<int>::iterator v_iter;
std::set<int>::iterator s_iter;
};
return_value getIterator(bool someCondition) {
// ...
}
然后你的getIterator()函数将构造一个return_value实例,初始化其v_iter或s_iter成员,并将其类型成员初始化为return_value :: vector或return_value :: set,以便getIterator()的调用者可以检查返回值,并确定返回什么类型的迭代器.
不同的方法也是可能的.例如,如果可以根据getIterator()的参数确定返回值的类型,则可以使用模板和特化来实现静态类型的解决方案.