That function should take one or more parameters, convert each parameter into QString, and append them all together, with a provided separation character (called Delimiter below).
Each provided parameter will always be: either a numerical value, an std::vector of numerical values, or что -то, что уже является Qstring . Численное значение здесь - это непогнированное целое число, или конвертируемый переход .
Значения внутри std :: vector должны быть разграничены запятой. Это намеренно. Это отличается от делимитера символа.
Это то, что я пробовал:
header.hppобразной
Код: Выделить всё
#ifndef __HEADER_HPP__
#define __HEADER_HPP__
// Qt Libraries
#include
class QClass
{
public:
template inline static QString ConvertToString(Type, OtherType...);
template inline static QString ConvertToString(const std::vector&, OtherType...);
template inline static QString ConvertToString(Type);
template inline static QString ConvertToString(const std::vector&);
};
template
QString QClass::ConvertToString(Type val, OtherType... args)
{
return QClass::ConvertToString(val) + Delimiter + QClass::ConvertToString(args...);
}
template
QString QClass::ConvertToString(const std::vector& vect, OtherType... args)
{
return QClass::ConvertToString(vect) + Delimiter + QClass::ConvertToString(args...);
}
template
QString QClass::ConvertToString(Type val)
{
return QString::number(static_cast(val));
}
template
QString QClass::ConvertToString(const std::vector& vect)
{
auto foo = QString();
for (const auto& val : vect)
foo += QString::number(val) + ',';
if (not foo.isEmpty())
foo.chop(1u);
return foo;
}
template QString QClass::ConvertToString(const char*);
template QString QClass::ConvertToString(QString);
template
QString QClass::ConvertToString(QString str)
{
return str;
}
template
QString QClass::ConvertToString(const char* foo)
{
return QString(foo);
}
#endif
< /code>
main.cpp
// Standard Libraries
#include
// Custom Libraries
#include "Header.hpp"
template
QString QClass::ConvertToString(QString str)
{
return str;
}
template
QString QClass::ConvertToString(const char* foo)
{
return QString(foo);
}
int main(void)
{
const auto vect = std::vector{1u, 7u, 2u};
const auto foo = QClass::ConvertToString(3u, vect, "Ok!", 5u);
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79749595/variadic-template-function-that-i-cant-fix-on-my-own[/url]
Мобильная версия