小编Tho*_*ber的帖子

使用模块系统从HTML调用typescript函数

我想从HTML调用TypeScript(ultimetely JavaScript)函数.问题是我还想使用模块系统(systemjs,commonjs等)和webpack.

这是一个例子:

example.ts:

export class Example {
    myFunction() {
        alert('Test');
    }
}
Run Code Online (Sandbox Code Playgroud)

example2.ts:

export function doSomething() {
    alert('Test2');
}
Run Code Online (Sandbox Code Playgroud)

example.html的:

<html>
    <head>
        <script src="path/to/the/compiled/js/file.js"></script>
        <script>
            $(document).ready(function() {
                $('#test-btn').click(function(){
                    var example = new Example(); //error1
                    example.myFunction();
                });
            });
        </script>
    </head>
    <body>
        <button id="test-btn">Click me</button>
        <a href="javascript:doSomething()">Click me too</a> <!-- error2 -->
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

错误注释指示错误发生的位置:找不到导出的类/函数,因为使用了模块系统.如果我查看已编译的js文件,我可以看到类和函数声明放在某些模块函数中,因此无法从HTML访问它们.

目前我通过将整个$(document).ready...部分移动到TypeScript文件中来使用解决方法.但是对于这个<a href...例子我没有任何解决方法.

所以我的最后一个问题是:实际上是否可以从HTML调用TypeScript函数/类并使用模块系统?

html javascript commonjs typescript systemjs

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

C++原子列表容器

我在玩,std::atomic但我认为我并不完全理解这个概念.我想知道为什么没有原子容器.所以我玩了一下.首先我尝试了以下内容:

std::atomic<std::list<int> > atomicList;
Run Code Online (Sandbox Code Playgroud)

但正如其他人已经指出的那样,这不起作用,因为构造函数是noexcept.所以我创造了一些黑客:

template<class T>
class MyList
{
public:
    //Make sure that no exception is thrown
    MyList() noexcept
        try: l()
    {}catch(...) {}

    void push_back(const T &t) { l.push_back(t); }

    void pop_front() { l.pop_front(); }

    size_t size() const { return l.size(); }

private:
    list<T> l;

};

atomic<MyList<int> > atomicList;
Run Code Online (Sandbox Code Playgroud)

现在我使用它,但我发现它无法正常工作,我得到Segmentation故障错误.

有人可以解释为什么不可能以这种方式创建原子列表?

编辑:如果有人想看看我的测试程序如何真正寻求更好的理解:

#include <list>
#include <thread>
#include <sys/time.h>
#include <iostream>
#include <atomic>

using namespace std;

template<class T>
class MyList
{

public:
    MyList() noexcept
        try: l() …
Run Code Online (Sandbox Code Playgroud)

c++ containers stl list atomic

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

std :: deque memory-address as array

我知道使用以下方法将矢量"转换"为c样式数组是合法的:

std:vector<char> v;
char *c = &v[0];
Run Code Online (Sandbox Code Playgroud)

对于std :: deque来说也是如此吗?

c++ arrays deque memory-address

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

数据没有使用lambda存储在向量中

我创建了一个从磁盘加载数据的自定义数据结构,然后数据结构类为每个加载的对象调用一个回调函数.这一切都很好 - 我只想给你一些背景信息.

实际问题在于以下功能:

void getData(std::vector<long long> &c) const
{
    c.reserve(myDataStructure.size());
    std::size_t index = 0;

    myDataStructure.forEach([&c, &index] (const long long &data)    //load data
    {
        c[index++] = data;     //line 8
        return true;           //line 9
    });
}
Run Code Online (Sandbox Code Playgroud)

该函数非常简单:它从我的自定义结构加载所有数据并将其保存在向量中.为了获得更好的性能,我在开始时保留内存.现在,当我在gdb中运行程序时,它多次到达第8行,但每次检查c它的内容都是空的.我是否以错误的方式使用lambda函数?顺便说一句:我正在使用g ++并启用了优化

附加信息:以下代码按预期工作,我真的没有看到区别:

void getData(std::function<bool(const MyData&)> f) const
{
    myDataStructure.forEach([&f] (const long long &data)
    {
        MyData d(data);
        //process data
        return f(d);
    });
}
Run Code Online (Sandbox Code Playgroud)

c++ lambda vector c++11

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

Vulkan异步模型加载

我不太确定它是否真的正确我想要做的事情但是没有那么多关于Vulkan的文档,所以这就是我提出的.如果我的设计方式完全错误,请纠正我!

在我的Vulkan应用程序中,我有三个不同的队列

  • graphicsQueue:用于提交图形命令缓冲区
  • presentQueue:用于显示完成的图像
  • transferQueue:用于复制缓冲区,纹理等.

我正在尝试实现异步模型加载,这意味着所有顶点,纹理等都在一个单独的线程中加载.模型加载完成后,主线程会更新绘图命令缓冲区,以便渲染新加载的对象.

一切正常,因为它应该期望我从Vulkan Validation层获得警告:

线程错误:VkQueue类型的对象同时用于线程...

如果我单步执行调试器,我可以看到以下行受到影响:

//main Loop
vkQueueSubmit(graphicsQueue, ...) //draw command buffer
Run Code Online (Sandbox Code Playgroud)

//Background loading thread
vkQueueSubmit(transferQueue, ...)//copy vertex command buffer
Run Code Online (Sandbox Code Playgroud)

我打印了地址,graphicsQueuetransferQueue发现它们是相同的(相同的地址),所以看起来我的显卡只支持单个队列.所以现在我正在尝试同步vkQueueSubmit使用信号量的调用:

submitInfo.signalSemaphoreCount = 1;
submitInfo.pSignalSemaphores = &queueSemaphore;
Run Code Online (Sandbox Code Playgroud)

不幸的是,错误仍然是一样的.

所以我的问题是:如何正确地同步呼叫vkQueueSubmit

c c++ vulkan

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