小编Eni*_*134的帖子

如何从另一个实例的类型动态实例化一个新实例?由 小码哥发布于

我想在堆上基于另一个对象创建一个新对象,该对象的类型只能在运行时知道。

举一个假设的例子,假设我们有一个游戏,用户选择一个角色,可以是巫师、战士或治疗师。计算机会创建一个匹配的非玩家角色来对抗玩家。也就是说,如果玩家选择了一个战士,计算机就会生成另一个战士实例。

我正在尝试使用多态性。假设巫师、战士和治疗师都继承自“Combattype”类

我想做的是类似伪代码的事情:

    combattype* player = new (chosen at runtimetype)();//player
    combattype* baseptr = new typeid(*player);   // computer - this doesn't work
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用类似的东西编写 if 语句

if(typeid(player).name(*player) == typeid.name(warrior)) { // make warrior}
Run Code Online (Sandbox Code Playgroud)

但如果有数百种类型,这很快就会变得复杂。我觉得有更好的方法,但我无法从概念上提出它。

我正在尝试做与此问题类似的事情,但在 c++ 中:Dynamically create an object of <Type> 感谢您的帮助。

c++ polymorphism dynamic instantiation decltype

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

C++ 11 - 将成员函数传递给线程给出:没有重载函数需要 2 个参数

从我查找的内容来看,我的语法是正确的,但我的编译器(VS2015)却在抱怨。请注意,我将名称空间 ee 与类 Network 一起使用。这是代码

    //code that doens't work
    thread clientThread(&ee::Network::clientRun, new ee::Network);
Run Code Online (Sandbox Code Playgroud)

*注意:在实际代码中,我没有将 new 作为参数调用,我在这里这样做是为了缩短代码。

我已经测试了这些功能并且它们可以工作,但我无法使用线程使它们工作。这是他们的签名。

    void serverRun();
    void clientRun();
    void clientRun(string ip);
Run Code Online (Sandbox Code Playgroud)

我的错误是:

  1. 错误 C2661“std::thread::thread”:没有重载函数需要 2 个参数

  2. abc 没有构造函数“std::thread::thread”的实例与参数列表匹配

有没有人对这种情况下可能发生的事情有任何见解?

c++ multithreading function member

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

如何从 gl-matrix.js 正确导入?

我来自 c++ 背景,所以 javascript 不是一种熟悉的语言。但是,我想我已经弄清楚了 ES6 模块导入/导出的基础知识。我在找出流行的库 gl-matrix https://github.com/toji/gl-matrix/blob/master/dist/gl-matrix.js 中的导出语法时遇到了一些麻烦。

我可以包含gl-matrix.js在我的 html 文件中,它的代码在我的 main.js 脚本中工作正常。但是,我正在尝试在 vscode 中使用 linter (eslint) 来帮助指导我使用正确的 javascript;eslint标记类型,如vec3mat4为红色的,因为他们是不确定的。我注意到我的其他模块也被标记为红色,直到我导入它们。

我试过这样的事情: import {vec3} from 'gl-matrix.js'; 并得到错误Uncaught SyntaxError: The requested module 'gl-matrix.js' does not provide an export named 'vec3'

我也试过import * as vl from 'gl-matrix.js';并使用 vl.vec3,但也不走运。在我看来 gl-matrix.js 没有使用 es6 模块导出,但我不确定。它肯定使用了一些导出系统。

单击 github 链接将带您到整个 gl-matrix.js 进行查看,但这里有一些它正在执行的导出类型的片段:

(function webpackUniversalModuleDefinition(root, factory) {
    if(typeof exports === 'object' && typeof module === 'object')
        module.exports = …
Run Code Online (Sandbox Code Playgroud)

javascript import export webpack

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