给定模板传递引用转换/类型转换运算符(没有 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;
}
并给出以下代码(带 const):
class TestA
{
public:
//Produces error
template<typename TemplateItem>
operator const TemplateItem&() const {TemplateItem A; A = 10; return A;}
};
产生这些错误:
错误:无法在赋值中将“TestA”转换为“int”
错误:无法在赋值中将“TestA”转换为“float”
问题
如何使转换/类型转换运算符返回模板类型的 const 传递引用?
语境
在大多数人进来并为“您无法将其转换为任何东西”而感到震惊之前,您将需要上下文。上面的代码是伪代码——我只对可能的 const 引用返回感兴趣,而不是模板化转换函数的缺陷。但如果你想知道它的用途,它相对简单:
TemplateClass -> Conversion(变成字节数据)-> File
TemplateClass <- Conversion(从字节数据变回)<- File
用户应该知道他们得到了什么,或者它应该是自动化的(IE 保存/加载状态)。是的,模板有一种通用方法,使用指针将任何类型转换为字节数据。
并且不要给我拍手称std已经在做这种事情了。转换过程是更复杂的类库设置的一部分。
我是一名程序员。相信我。C++ 信任我,让我犯错。只有这样我才会学习。