Я разбираю текстовый файл, чтобы читать переменные из него. Существование переменных в файле важно, поэтому я решил написать класс шаблона, который будет содержать оба значения переменной (Value
) и его флаг существования (Exists
).Перегрузка оператора индекса класса для доступа к элементам элемента std :: vector object
template<class Type>
class MyVariable
{
public:
Type Value;
bool Exists;
MyVariable()
: Exists(false), Value(Type())
{
}
MyVariable(const Type & Value)
: Exists(true), Value(Value)
{
}
MyVariable(const Type && Value)
: Exists(true), Value(std::move(Value))
{
}
MyVariable(const Type & Value, bool Existance)
: Exists(Existance), Value(Value)
{
}
MyVariable(const Type && Value, bool Existance)
: Exists(Existance), Value(std::move(Value))
{
}
size_t size() const
{
return Value.size();
}
const MyVariable & operator=(const MyVariable & Another)
{
Value = Another.Value;
Exists = true;
}
const MyVariable & operator=(const MyVariable && Another)
{
Value = std::move(Another.Value);
Exists = true;
}
const Type & operator[](size_t Index) const
{
return Value[Index];
}
Type & operator[](size_t Index)
{
return Value[Index];
}
operator const Type &() const
{
Value;
}
operator Type &()
{
Value;
}
};
Сохраненная тип переменной будет иногда быть std::vector
, так что я перегружен оператор индекс operator[]
для прямого доступа к элементам вектора. Так что я могу сделать частным Value
и Exists
.
Я использую этот класс, как это в коде:
const MyVariable<std::vector<int>> AVector({11, 22, 33, 44 ,55});
for (size_t i=0; i<AVector.size(); i++)
{
std::wcout << L"Vector element #" << i << L" --> " << AVector.Value[i] << std::endl; // Works okay.
std::wcout << L"Vector element #" << i << L" --> " << AVector[i] << std::endl; // Gives error.
}
Я получаю следующее сообщение об ошибке:
Ошибка C2679 бинарное
'<<'
: ни один оператор не найден, который принимает правый операнд тип'const std::vector<int,std::allocator<_Ty>>'
(или нет приемлемой конверсии)
Что я здесь делаю неправильно?
Вы можете посмотреть на 'optional' (который не требует, чтобы' type' по умолчанию конструктивна). – Jarod42