我有很多函数将const对象的指针容器作为参数。我需要使用指向非const对象的指针容器来调用这些函数。我似乎记得在某处读到这是不允许的。有没有办法解决这个问题,而不是编写2个函数副本?
示例(此代码无法编译):
#include <vector>
#include <iostream>
using namespace std;
void fn(vector<const int *> par) {
cout<<"Function with const ptrs\n"<<endl;
}
int main()
{
vector<int *>v;
fn(v);
}
答案 0 :(得分:1)
您可以初始化一个新的矢量。
#include <vector>
#include <iostream>
using namespace std;
void fn(vector<const int *> par) {
cout << "Function with const ptrs\n" << endl;
}
int main()
{
vector<int *>v;
fn(vector<const int *>(v.begin(), v.end()));
}
答案 1 :(得分:1)
如果是一个选项,请考虑使您的函数采用范围,例如:
template<typename t_iterator>
void fn(t_iterator beg_iter, t_iterator end_iter) {
for(; beg_iter != end_iter; ++beg_iter) {
// do something
}
}
此操作应在vector<int*>
和vector<const int*>
以及deque<int*>
等操作