小编Dan*_*olf的帖子

Lambdas似乎不适用于VS2010中的ref类

Visual Studio 2010中一个很酷的新C++特性是lambda表达式.但是,我无法让他们在托管类中工作.

class UnmanagedClass {
    void Foo() {
        // Creating empty lambda within unmanaged class.
        // This compiles fine.
        auto lambda = [](){ ; };
    }
};

ref class ManagedClass {
    void Foo() {
        // Creating empty lambda within managed class.
        // This creates error C3809:
        // A managed type cannot have any friend functions/classes/interfaces.
        auto lambda = [](){ ; };
    }
};
Run Code Online (Sandbox Code Playgroud)

我最好的猜测是编译器将匿名函数类创建为友元类,即使我从不使用类成员.这似乎意味着lambda不能在ref类中使用.

当我读到VS2010将lambda表达式添加到C++时,我感到非常高兴.有人知道如何让他们在ref类中工作吗?

lambda c++-cli c++11

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

根据贝塞尔曲线插值间隔,插值之间的值

为了实现2D动画,我正在寻找两个关键帧之间的插值,其中变化的速度由贝塞尔曲线定义.问题是贝塞尔曲线以参数形式表示,而要求是能够评估特定时间的值.

详细说来,假设10和40的值将在4秒内插值,其值不是经常变化,而是由表示为0,0 0.2,0.3 0.5,0.5 1,1的贝塞尔曲线定义.现在如果我以每秒24帧的速度绘制,我需要评估每帧的值.我怎样才能做到这一点 ?我看了De Casteljau算法并且认为将曲线分成24*4个片段4秒将解决我的问题但是这听起来是错误的,因为时间沿着"x"轴而不是沿着曲线.

进一步简化如果我在平面中绘制曲线,x轴表示时间,y轴表示我正在寻找的值.我实际需要的是能够找出对应于"x"的"y".然后我可以在24个分区中划分x并知道每个帧的值

math animation bezier core-animation

5
推荐指数
2
解决办法
2832
查看次数

XSD:可以具有简单内容或元素上下文的复杂类型

我正在为相当复杂的 XML 文件格式编写 XSD。在许多情况下,XML 可以包含实际的文字值或生成该值的脚本。(想想 Excel:42=21+21

例如,要指定大小,写入以下任一内容应该是有效的:

<size>42</size>
<size><script>2*21</script></size>
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是在元素<choice>中允许使用 int 或脚本size。但是,然后我必须给字符串元素一个名称,从而导致像<size><value>42</value></size>. 由于文字的使用频率远远高于脚本,因此我不想让它们的语法变得臃肿。

关于如何在 XSD 中表达初始语法有什么想法吗?

xml xsd complextype

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

在编译时将文本文件导入原始字符串文字

我有一个文本文件,其中包含我的应用程序所需的资源。该文件包含任意纯文本,而不是带有变量赋值的 C++ 代码。我不想将文本文件与我的申请一起发送;我更愿意将其编译到其中。所以我尝试了以下方法:

#include <iostream>
#include <string>

int main() {
    std::string test = R"(
#include <textresource.txt>
)";
    std::cerr << test << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我希望#include第 6 行在预处理时执行,并替换为资源文件的内容。之后,编译器将看到带有资源数据的原始字符串文字。

然而,输出只是#include <textresource.txt>带有换行符的文本。显然,它#include从未被执行过。(我使用的是 Visual Studio 2015。)

为什么工作没有#include按预期进行?是否有其他语法可以在编译时将文本文件(而不是代码)导入到变量中?

c++ resources c-preprocessor

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

为什么二进制文件不放在CMAKE_CURRENT_BINARY_DIR中?

我的理解CMAKE_CURRENT_BINARY_DIR应该指向当前CMakeLists.txt文件的二进制文件所在的目录。但是,事实并非如此。

考虑以下文件结构:

CMakeTest
+- CMakeLists.txt
+- main.cpp
Run Code Online (Sandbox Code Playgroud)

CMakeLists.txt

cmake_minimum_required(VERSION 3.2)
add_executable(CMakeTest main.cpp)
message(STATUS "CMAKE_CURRENT_BINARY_DIR = ${CMAKE_CURRENT_BINARY_DIR}")
Run Code Online (Sandbox Code Playgroud)

main.cpp

#include <iostream>

int main() {
    std::cout << "Hello, World!";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在(Windows)命令行上,我运行以下命令:

md build
cd build
cmake .. -G "Visual Studio 14 2015"
cmake --build .
Run Code Online (Sandbox Code Playgroud)

第一条cmake命令(除其他外)打印该行

CMAKE_CURRENT_BINARY_DIR = X:/ dev / projects / CMakeTest / build

因此,我希望生成的二进制文件CMakeTest.exe最终会在那里。但是实际上,它位于X:/ dev / projects / CMakeTest / build / Debug中。

为什么二进制文件没有放在CMAKE_CURRENT_BINARY_DIR子目录中?是否有任何CMake变量告诉我该子目录是什么?

编辑:

我没有尝试更改放置二进制文件的目录。我正在尝试确定它。原因是这样的:

在构建期间,在与可执行文件相同的目录中创建了许多其他资源文件。(这部分工作。)我想使用install(FILES, …

c++ cmake

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

比较值和参考值

考虑下面的 Rust 函数,它的目的是指示给定的 3 字节字符串是否等于b"foo"

fn is_foo(value: [u8; 3]) -> bool {
    value == b"foo"
}
Run Code Online (Sandbox Code Playgroud)

这不起作用:

错误[E0277]:无法[u8; 3]比较&[u8; 3]

编译器抱怨它无法将某种类型的值与相同类型的引用进行比较。

我发现了两种让平等检查发挥作用的方法:

  • 首先将值转换为 ref:&value == b"foo"
  • 首先将 ref 转换为值:value == *b"foo"

来自 C++(其中值和引用几乎是同一件事),这两种方法对我来说看起来都有点奇怪。比较值和引用的最惯用的方法是什么?

rust

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

如何使用fs.copyTpl忽略Yeoman中的文件

我如何忽略文件?我想排除任何子目录中以_开头的所有文件。这两种方法我都没有成功:

this.fs.copyTpl(
   this.templatePath('basicFiles/'),
   this.destinationPath(''),
   answers,
   {ignore:"_*.*"}
);

this.fs.copyTpl(
  [!*.*,this.templatePath('basicFiles/')],
  this.destinationPath(''),
  answers
);
Run Code Online (Sandbox Code Playgroud)

更笼统地说,想将每个basic / _exmaple.json合并(深层复制)到AdditionalConfig / example.json到desitnationPaht / exmaple.json(合并)。

每个想法都是受欢迎的:)。

json yeoman yeoman-generator

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

如何在编译时检查查找表是否具有正确的大小?

我是查找表的硬编码值.所需数量的元素来自包含的文件,该文件可能在将来的某个时刻发生变化.所以我想在编译时确保我指定的元素数量确实与所需数量匹配.

看看这段代码:

#include <array>

// Assume this comes from some included file
constexpr size_t elementCount = 5;

int main() {
    // This works.
    const std::array<int, elementCount> lookup { 2, 4, 6, 8, 10 };

    // But so does this.
    const std::array<int, elementCount> lookup2 { 2, 4, 6 };

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

std::array看起来非常适合查找表,因为它的大小在编译时是固定的.但是,我无法确保使用正确数量的元素初始化它.由于聚合初始化,即使我指定的元素太少,该示例也会编译正常.

我提出了以下解决方法,但感觉非常难看:

#include <array>

template<class T> std::array<T, 1> makeArray(T e1) {
    return { e1 };
}

template<class T> std::array<T, 2> makeArray(T e1, …
Run Code Online (Sandbox Code Playgroud)

c++

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

Babel插件:如何获取给定节点的路径?

我正在编写一个Babel插件,需要操作代码文件中的每个顶级声明,即直接在Program节点下面的每个声明.

Babel插件手册说"手动查找时不要遍历",解释说我可以简单地遍历子节点.这很好.我的问题是,所有的操作功能- ,,replaceWith 等-被定义的路径,而不是节点.所以,当我在子节点上进行迭代时,我该如何操作它们呢?insertBeforeinsertAfter

在我看来,我需要一些从给定节点获取路径对象的方法.但我只能找到相反案例的文档:从路径对象(path.node)获取节点.

javascript plugins babeljs

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