나는 당신을 올바르게 이해하는 지 모르겠다. 그러나 다음 코드는 벡터에서 index
위치의 변형을 추출하고 그 값을 T
에 대한 const 참조로 반환합니다. 변형에 T
이 저장되지 않은 경우에도 T
을 반환해야합니다. 따라서이 경우 반환 할 수있는 몇 가지 기본값이 필요합니다. 지난 3 개 쿼리는 기본 값을 반환하는 것을 볼 수있는
template <typename T>
const T& value(int index)
{
// Some value to return, if the variant does not store a T.
static T defaultValue;
const QVariant& variant = m_d.at(index);
// If the variant stores a T, return it.
if (variant.userType() == qMetaTypeId<T>())
return *reinterpret_cast<const T*>(variant.constData());
// Return the default value. Or add an assertion here. Or throw
// an exception etc.
return defaultValue;
}
이 간단한 테스트 케이스
m_d.push_back(10);
m_d.push_back(QString("Hello"));
m_d.push_back(3.14);
// This returns what is stored in the vector.
qDebug() << value<int>(0);
qDebug() << value<QString>(1);
qDebug() << value<double>(2);
// This returns the default value.
qDebug() << value<int>(1);
qDebug() << value<QString>(2);
qDebug() << value<double>(0);
다음과 같은 출력을
10
"Hello"
3.14
0
""
0
을 생산하고 있습니다.
참고 :이 요청 된 요소를 찾을 수없는 경우 Qt는 용기 종종 함수가 반환 (예를 들어 QMap::value()
)에 기본 T
를 전달합니다. 또한
template <typename T>
T value(int index, const T& defaultValue = T())
{
...
}
편집 같은 것을 사용하려고 수 있습니다 임시에서 const를 참조를 반환 수정되었습니다.
오직 포인터가'QVariant'에 저장되어 있습니까? – cmannett85
QVariant에 포인터를 저장하지 않습니다. – nikitoz
그런데 왜 포인터에 캐스팅하려고합니까? 그리고'QVariant :: constData()'도 존재하지 않습니다. – cmannett85