Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables D禁用结构为左值_Variables_Struct_D_Lvalue - Fatal编程技术网

Variables D禁用结构为左值

Variables D禁用结构为左值,variables,struct,d,lvalue,Variables,Struct,D,Lvalue,有没有办法禁止将结构用作左值(不能用作变量) 我尝试过禁用构造函数和opAssign,但最终,您仍然可以从函数中分配它 unittest { //mystruct doesntCompile; mystruct shouldntCompile = makeMyStruct(); } struct mystruct { @disable this(); @disable this(this); @disable void opAssign(ref mys

有没有办法禁止将结构用作左值(不能用作变量)

我尝试过禁用构造函数和opAssign,但最终,您仍然可以从函数中分配它

unittest
{
    //mystruct doesntCompile;
    mystruct shouldntCompile = makeMyStruct();
}


struct mystruct
{
    @disable this();
    @disable this(this);
    @disable void opAssign(ref mystruct);
    @disable void opAssign(mystruct);
    this(int dummyArgument){}
}

mystruct makeMyStruct()
{
    return mystruct(0);
}
有没有办法禁止将结构用作左值(不能用作变量)

不,不可能。每种类型都可以有左值实例


如果你愿意,你可能会得到更好的答案。为什么要阻止将结构用作左值?

是否要查找
const
关键字?问题主要是出于病态的好奇。最初的问题是实现一个带有Swizzle的向量结构,您可以在其上使用所有运算符(包括opOpAssign)。这是我们现在使用代理结构实现的。代理结构本身不应用作变量,而只能临时存在于表达式中。您不应该这样做:
autoproxy=vec.xyz;x=5//更改vec.x
,因为这将使值类型预期无效。当前的实现在代理中使用联合。好的,那么您能够通过代理写入的问题是什么?我可以看书吗?如果你分享代理的实现,并确切说明它的用途,我相信我能帮上忙。你的问题所问的似乎不是你需要做的。是的,没错。用户应该能够读取原始向量的值,但只能使用单个表达式为其赋值。预期用途示例:
vec1.zw+=vec2.zw+vec3.yz//所有swizzle都是代理
我的简单希望是,通过拒绝左值使用,我们可以得到像
autoproxy=vec.xyz
默认为
alias makeVector this
。感谢您提供的帮助,但代码尚不适合公众检查。此外,我或多或少相信我有能力看穿这一点