小编Bra*_*don的帖子

隔离位并展平它们

问题

假设我有一个掩码mask和一个输入n,例如

mask = 0x10f3 (0001 0000 1111 0011)
n    = 0xda4d (1101 1010 0100 1101)
Run Code Online (Sandbox Code Playgroud)

我想1)隔离掩码位(n从不在中删除位mask)

masked_n = 0x10f3 & 0xda4d = 0x1041 (0001 0000 0100 0001)
Run Code Online (Sandbox Code Playgroud)

2) "扁平化"他们(摆脱零位mask,并将这些同样转移到masked_n)?

flattened_mask = 0x007f (0000 0000 0111 1111)

bits to discard         (___1 ____ 0100 __01)
first shift             (  __ _1__ __01 0001)
second shift            (       __ _101 0001)
result         = 0x0051 (0000 0000 0101 0001)
Run Code Online (Sandbox Code Playgroud)

试过的解决方案 …

c++ bit-manipulation

5
推荐指数
1
解决办法
119
查看次数

使用设备的方向绕原点旋转

我试图用three.js复制Google的Cardboard Demo"Exhibit"的功能.我直接从Chrome实验网页上获取了起始示例,只是在代码中删除了在方法中绘制一个简单的三角形金字塔init:

function init() {
  renderer = new THREE.WebGLRenderer();
  element = renderer.domElement;
  container = document.getElementById('example');
  container.appendChild(element);

  effect = new THREE.StereoEffect(renderer);

  scene = new THREE.Scene();

  camera = new THREE.PerspectiveCamera(90, 1, 0.001, 700);
  camera.position.set(0, 0, 50);
  scene.add(camera);

  controls = new THREE.OrbitControls(camera, element);
  controls.rotateUp(Math.PI / 4);
  controls.noZoom = true;
  controls.noPan = true;

  var geometry = new THREE.CylinderGeometry( 0, 10, 30, 4, 1 );
  var material = new THREE.MeshPhongMaterial( { color:0xffffff, shading: THREE.FlatShading } );

  var mesh = new THREE.Mesh( …
Run Code Online (Sandbox Code Playgroud)

javascript three.js google-cardboard

2
推荐指数
1
解决办法
2175
查看次数

通过跳过可选参数来填充参数包

我正在编写一个用于日志记录的辅助函数:它收集调用站点信息,同时还创建一个Error类型对象。

template<typename ErrorTy, typename... ArgTys>
std::unique_ptr<Error> makeError(const char* fileName = __builtin_FILE(),
        int lineNum = __builtin_LINE(),
        const char* funcName = __builtin_FUNCTION(), ArgTys &&... args) {
    return std::make_unique<ContextualError<ErrorTy>>(fileName, lineNum, funcName,
            std::forward<ArgTys>(args)...);
}

// ...

template<typename ErrorTy>
struct ContextualError : ErrorTy {
    template<typename... ArgTys>
    ContextualError(std::string_view fileName, int lineNum,
            std::string_view funcName, ArgTys &&... args) :
            fileName_(fileName), lineNum_(lineNum), funcName_(funcName),
            ErrorTy(std::forward<ArgTys>(args)...) {}

    // ...
};
Run Code Online (Sandbox Code Playgroud)

由于实际的Error类可以有任意的构造函数,我希望得到makeErrorContextualError构造函数完美地转发所有内容。不幸的是,makeError像这样调用将尝试填充前三个可选参数,而不是跳过它们并填充参数包:

auto err = makeError<FileError>("foo.exe", "Invalid header");

// error: no matching …
Run Code Online (Sandbox Code Playgroud)

c++ variadic-templates c++11

1
推荐指数
1
解决办法
175
查看次数