use more classical approach to function template instantiation

This commit is contained in:
Jean-Francois Dockes 2011-07-06 11:05:57 +02:00
parent 700a408947
commit 3b6870f133
2 changed files with 17 additions and 39 deletions

View File

@ -281,21 +281,12 @@ template <class T> bool stringToStrings(const string &s, T &tokens,
return true;
}
bool stringToStrings(const string &s, list<string> &tokens,
const string& as)
{
return stringToStrings<list<string> >(s, tokens, as);
}
bool stringToStrings(const string &s, vector<string> &tokens,
const string& as)
{
return stringToStrings<vector<string> >(s, tokens, as);
}
bool stringToStrings(const string &s, set<string> &tokens,
const string& as)
{
return stringToStrings<set<string> >(s, tokens, as);
}
template bool stringToStrings<list<string> >(const string &,
list<string> &, const string&);
template bool stringToStrings<vector<string> >(const string &,
vector<string> &,const string&);
template bool stringToStrings<set<string> >(const string &,
set<string> &, const string&);
template <class T> void stringsToString(const T &tokens, string &s)
{
@ -321,18 +312,9 @@ template <class T> void stringsToString(const T &tokens, string &s)
s.append(1, '"');
}
}
void stringsToString(const list<string> &tokens, string &s)
{
stringsToString<list<string> >(tokens, s);
}
void stringsToString(const vector<string> &tokens, string &s)
{
stringsToString<vector<string> >(tokens, s);
}
void stringsToString(const set<string> &tokens, string &s)
{
stringsToString<set<string> >(tokens, s);
}
template void stringsToString<list<string> >(const list<string> &, string &);
template void stringsToString<vector<string> >(const vector<string> &,string &);
template void stringsToString<set<string> >(const set<string> &, string &);
void stringToTokens(const string& str, vector<string>& tokens,
const string& delims, bool skipinit)
@ -499,7 +481,7 @@ string escapeShell(const string &in)
}
// Small utility to substitute printf-like percents cmds in a string
// Substitute printf-like percent cmds inside a string
bool pcSubst(const string& in, string& out, map<char, string>& subs)
{
string::const_iterator it;

View File

@ -47,8 +47,10 @@ struct StringIcmpPred {
extern int stringlowercmp(const string& alreadylower, const string& s2);
extern int stringuppercmp(const string& alreadyupper, const string& s2);
extern void stringtolower(string& io);
extern string stringtolower(const string& io);
// Is one string the end part of the other ?
extern int stringisuffcmp(const string& s1, const string& s2);
@ -69,8 +71,8 @@ extern bool samecharset(const string &cs1, const string &cs2);
struct DateInterval {
int y1;int m1;int d1; int y2;int m2;int d2;
};
bool parsedateinterval(const string&s, DateInterval *di);
int monthdays(int mon, int year);
extern bool parsedateinterval(const string&s, DateInterval *di);
extern int monthdays(int mon, int year);
/**
* Parse input string into list of strings.
@ -82,19 +84,13 @@ int monthdays(int mon, int year);
* but so are the iso-8859-x and surely others. addseps do have to be
* single-bytes
*/
extern bool stringToStrings(const string& s, list<string> &tokens,
const string& addseps = "");
extern bool stringToStrings(const string& s, vector<string> &tokens,
const string& addseps = "");
extern bool stringToStrings(const string& s, set<string> &tokens,
const string& addseps = "");
template <class T> bool stringToStrings(const string& s, T &tokens,
const string& addseps = "");
/**
* Inverse operation:
*/
extern void stringsToString(const list<string> &tokens, string &s);
extern void stringsToString(const vector<string> &tokens, string &s);
extern void stringsToString(const set<string> &tokens, string &s);
template <class T> void stringsToString(const T &tokens, string &s);
/**
* Split input string. No handling of quoting