Учитывая шаблон пройти по ссылке преобразования/типа произнесения оператора (без сопзЬ) возможно:C++ преобразование Const пройти по ссылке
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;}
};
Производит эти ошибки:
error: cannot convert 'TestA' to 'int' in assignment
error: cannot convert 'TestA' to 'float' in assignment
Вопрос
Как сделать так, чтобы оператор преобразования/типа-литья возвращал const-by-reference типа шаблона?
Контекст
Перед большинство людей приходят и урод о том, как «вы не можете преобразовать его в только что-нибудь», вы будете нуждаться в контексте. Вышеприведенный код - псевдокод - меня интересует только возможность ссылок на константу, а не ловушки шаблонной функции преобразования. Но если вам интересно, что это за, это относительно просто:
TemplateClass -> Conversion (включена в данные байт) -> Файл
TemplateClass < - Преобразование (меняется обратно из данных байт) < - Файл
Пользователь должен знать, что они выходят, или ожидается, что он будет автоматизирован (состояния сохранения/загрузки IE). И да, существует универсальный метод для шаблонов с использованием указателей для преобразования любого типа в байтовые данные.
И не давайте мне claptrap о том, что STD делает подобное. Процесс преобразования является частью более сложной библиотеки классов.
Я программист. Доверьтесь мне. C++ доверяет мне и позволяет мне ошибаться. Только я узнаю.
@Als: Вы имеете в виду, как этот метод преобразования ... в классе, прямо там? – SSight3
Как общий совет: вы не должны возвращать ссылки на временные значения. Вместо этого возвращайте значение: 'operator TheType() const {...}', в противном случае вы можете создать ссылку на свидание. –
@ Он уже делает это с функциями преобразования. Я думаю, что вы хотели сказать, что «Do ** not ** использовать функции преобразования для этого». –