Теперь функция «JoinStrings», которую я использую, может присоединяться только к типу данных std :: string. Мне нужно теперь присоединиться к целому числу. Поэтому я надеюсь реорганизовать его. Но я потерпел неудачу. Я рад слышать «вы не можете так поступать», потому что я действительно не знаю, разумно ли использовать эти коды таким образом или нет.Как реализовать специализированную специализацию?
вызывающую часть:
int main(int argc, char* argv[]) {
vector<int> integers;
string str = JoinStrings(integers);
cout << str << endl;
}
Часть I не удалось осуществить:
#include <string>
template <class ConstForwardIterator>
void JoinStrings(const ConstForwardIterator& begin,
const ConstForwardIterator& end,
const std::string& delimiter,
std::string* output) {
output->clear();
for (ConstForwardIterator iter = begin; iter != end; ++iter) {
if (iter != begin) {
output->append(delimiter);
}
output->append(*iter);
}
}
// What data type should be declared for IntegerConstForwardIterator?
template<>
void JoinStrings(const IntegerConstForwardIterator& begin,
const IntegerConstForwardIterator& end,
const std::string& delimiter,
std::string* output) {
output->clear();
for (IntegerConstForwardIterator iter = begin; iter != end; ++iter) {
if (iter != begin) {
output->append(delimiter);
}
output->append(std::to_string(*iter));
}
}
template <class ConstForwardIterator>
std::string JoinStrings(const ConstForwardIterator& begin,
const ConstForwardIterator& end,
const std::string& delimiter) {
std::string output;
JoinStrings(begin, end, delimiter, &output);
return output;
}
template <class Container>
std::string JoinStrings(const Container& container,
const std::string& delimiter = " ") {
return JoinStrings(container.begin(), container.end(), delimiter);
}
не удалось как? вы получили ошибки компилятора или неожиданное поведение? – kfsone
Интуитивно я предлагаю вам не использовать 'std :: string' для генерации вывода, а' std :: ostringstream'. Это позволило бы решить многие проблемы - в частности, вам даже не понадобилась бы специализация шаблона для 'int'. – jogojapan
Хорошо, я пытаюсь. Кстати, есть ли потеря эффективности? – Mou