Возможно использование шаблона преобразования по ссылке / оператора приведения типа (без констант):
class TestA
{
public:
//Needs to be a const return
template<typename TemplateItem>
operator TemplateItem&() const {TemplateItem A; A = 10; return A;}
};
int main()
{
TestA A;
{
int N;
N = A;
printf("%d!\n",N);
}
{
float N;
N = A;
printf("%f!\n",N);
}
return 0;
}
И с учетом следующего кода (с константой):
class TestA
{
public:
//Produces error
template<typename TemplateItem>
operator const TemplateItem&() const {TemplateItem A; A = 10; return A;}
};
Выдает эти ошибки:
ошибка: невозможно преобразовать 'TestA' в 'int' в присваивании
ошибка: невозможно преобразовать 'TestA' в 'float' в присваивании
Вопрос
Как мне сделать так, чтобы оператор преобразования / приведение типа возвращал константную ссылку на тип шаблона?
Context
Прежде чем большинство людей придет и задумается о том, что «вы не можете преобразовать это просто во что-то», вам нужен контекст. Приведенный выше код является псевдокодом - меня интересует только возможность возврата константных ссылок, а не ловушки шаблонной функции преобразования. Но если вам интересно, для чего это нужно, это относительно просто:
TemplateClass -> Преобразование (преобразовано в байтовые данные) -> Файл
TemplateClass <- Преобразование (изменено обратно из байтовых данных) <- Файл </p>
Ожидается, что пользователь будет знать, что он получает, или он должен быть автоматизирован (т.е. сохранять / загружать состояния). И да, существует универсальный метод для шаблонов, использующих указатели для преобразования любого типа в байтовые данные.
И не дай мне хлопать о том, что я уже делаю подобные вещи. Процесс преобразования является частью более сложной настройки библиотеки классов.
Я программист. Доверьтесь мне. C ++ доверяет мне и позволяет мне делать ошибки. Только так я научусь.