我想在我的班级中有一个可读的属性,但不能通过类外部的代码直接修改.基本上,相当于从C++中的方法返回const引用到成员.
写下这些内容:
class test {
private readonly x_ = new Uint8Array([0, 1, 2]);
public x() { return this.x_;}
}
Run Code Online (Sandbox Code Playgroud)
不起作用,因为以下代码仍然编译:
let a = new test();
a.x()[0] = 1;
Run Code Online (Sandbox Code Playgroud)
实现这一目标的正确方法是什么?
我一直在阅读阴影贴图,并找到了以下教程:
http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-16-shadow-mapping/
直到作者开始讨论"阴影痤疮"神器时,我才有意义.他们用下图解释原因(没有文字):

我仍然很难理解究竟是什么原因导致阴影痤疮以及为什么添加偏见会修复它.
似乎阴影贴图的分辨率对痤疮没有影响.之后怎么样了?也许漂浮精度,还是别的?
以下表达式的结果是否定义明确?它是什么?
hash_map[object.key()] = std::move(object);
我不确定std::move零件的影响是否会在零件之前或之后发生object.key(),因此我的问题.
请注意,这与调用不同valid()。valid()指示将来是否完全具有有效的共享状态,但是我想知道的是是否已设置了将来的值(即通过std::promise::set_value)。
有一种wait_for方法,但是我根本不希望调用线程阻塞,我只想检查值的存在。从理论上讲,我可以将wait_for持续时间设为零,但我不知道这是否实际上是这样做的首选方式,而且我不确定wait_for以零持续时间调用时的预期行为是什么。
例如,考虑一下SendInput.签名如下所示:
UINT WINAPI SendInput(
_In_ UINT nInputs,
_In_ LPINPUT pInputs,
_In_ int cbSize
);
Run Code Online (Sandbox Code Playgroud)
文件说:
cbSize [in]类型:int INPUT结构的大小(以字节为单位).如果cbSize不是INPUT结构的大小,则该函数将失败.
由于该函数已经使用了INPUT结构(并且可能对其各种字段做了一些事情),所以它不应该预先知道结构的大小吗?
我可以想象的唯一原因是,这是一种奇怪的向后兼容性技巧,可以使较旧的库二进制文件与可能在结构末尾引入新字段的较新头文件兼容.
我在 DLL 中有一个类,如下所示:
#ifdef LIB_EXPORT
#define LIB_API __declspec(dllexport)
#else
#define LIB_API __declspec(dllimport)
#endif
...
class LIB_API MyClass {
public:
// ...public interface...
private:
// ...some private fields...
std::unique_ptr<OtherClass> otherPtr_;
};
Run Code Online (Sandbox Code Playgroud)
现在,我认为这可能是一个问题:如果客户端代码使用稍微不同的 unique_ptr 版本,则 MyClass 对象的内存布局实际上与 DLL 中的代码可能期望的不同。
我真的不想诉诸 Pimpl 成语来隐藏unique_ptr公共标题。我可能会推出自己的简化版本unique_ptr(我只需要其功能的一个子集,例如我不需要自定义删除器)。但是,在我尝试之前,有没有其他方法可以解决这个问题?