На момент написания этого полного ответа пользователь zett42
дал правильное решение вашей проблемы.Мне потребовалось некоторое время, чтобы правильно установить Qt
и интегрировать его в Visual Studio 2017, так как теперь, когда он у меня работает, я наконец-то смог правильно собрать и скомпилировать свой код, чтобы убедиться, что он работает без каких-либо проблем или ошибок.,
Я думаю, что самое простое, что можно сделать, это использовать функцию QString
toStdString()
.Вы можете написать все свои функции с версией std::string
по умолчанию, а затем просто специализировать перегруженную версию QString
, которая просто вызывает версию std::string
, преобразовав содержимое QString
в std::string
.Я буду использовать простую функцию printString()
, чтобы продемонстрировать это самым простым способом;Вы можете воспользоваться этим подходом и расширить его отсюда.
#include <string>
#include <iostream>
#include <QString>
// defaulted std::string version (full implementation of function)
template <typename StringType>
void printString(const StringType& s) {
std::cout << s << '\n';
}
// specialized overloaded QString version (it calls the std::string version)
template<>
void printString<QString>(const QString& s ) {
printString(s.toStdString());
}
int main() {
const std::string str( "I am an original std::string" );
const QString qStr( "I am a QString converted to a std::string" );
printString(str);
printString(qStr);
return 0;
}
-Output-
I am an original std::string
I am a QString converted to a std::string
Я думаю, что это самый простой способ достичь того, кем вы являетесьпросить.Это также имеет то преимущество, что если вам нужно внести изменения в вашу реализацию, вам нужно всего лишь изменить версию std::string
.