我需要写一个模板函数replace_all在C++中,这将需要一个字符串,wstring的,glibmm :: ustring等,并更换所有出现search在subject用replace.
replace_all.cc
template < class T >
T replace_all(
T const &search,
T const &replace,
T const &subject
) {
T result;
typename T::size_type done = 0;
typename T::size_type pos;
while ((pos = subject.find(search, done)) != T::npos) {
result.append (subject, done, pos - done);
result.append (replace);
done = pos + search.size ();
}
result.append(subject, done, subject.max_size());
return result;
}
Run Code Online (Sandbox Code Playgroud)
test.cc
#include <iostream>
template < class T >
T replace_all(
T …Run Code Online (Sandbox Code Playgroud) 可能重复:
C++模板,未定义的引用
我有一个非常简单的程序,由三个文件组成,它们从普通数组构建向量:
//create.hpp
#ifndef CREATE_HPP_
#define CREATE_HPP_
#include <vector>
using namespace std;
template<class T>
vector<T> create_list(T uarray[], size_t size);
#endif /* CREATE_HPP_ */
Run Code Online (Sandbox Code Playgroud)
//create.cpp
#include "create.hpp"
template<class T>
vector<T> create_list(T uarray[], size_t size){
vector<T> ulist(uarray, uarray + size);
return ulist;
}
Run Code Online (Sandbox Code Playgroud)
//main.cpp
#include <vector>
#include <iostream>
#include "create.hpp"
using namespace std;
int main(){
char temp[] = { '/', '>' };
vector<char> uvec = create_list<char>(temp, 2);
vector<char>::iterator iter=uvec.begin();
for(;iter != uvec.end();iter++){
cout<<*iter<<endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
构建过程如下:
g++ -O0 -g3 …Run Code Online (Sandbox Code Playgroud)