我正在尝试创建一个可以动态形成转义序列字符的程序.请看下面的代码.
void ofApp::keyPressed(int key){
string escapeSeq;
escapeSeq.push_back('\\');
escapeSeq.push_back((char)key);
string text = "Hello" + escapeSeq + "World";
cout << text << endl;
}
Run Code Online (Sandbox Code Playgroud)
例如,如果我按'n'键,我希望它打印出来
你好
世界
但它确实打印出来了
你好\nWorld
如何使程序运行?提前致谢!
我试图找到一种方法来test.lua在不同的 Lua 状态之间共享特定 Lua 脚本(在示例中)的全局变量。
这是我的简单示例代码:
在 test.lua
num = 2
Run Code Online (Sandbox Code Playgroud)
在 main.cpp
#include <iostream>
#include <lua.hpp>
int main()
{
lua_State *L1 = luaL_newstate(); //script A
luaL_openlibs(L1);
lua_settop(L1, 0);
luaL_dostring(L1, "require('test') num = 5");
lua_State *L2 = luaL_newstate(); //script B
luaL_openlibs(L2);
lua_settop(L2, 0);
luaL_dostring(L2, "require('test') print(num)");
lua_close(L1);
lua_close(L2);
}
Run Code Online (Sandbox Code Playgroud)
我希望得到,5但我得到了2。
不能在不同的lua_State*through之间共享全局变量require吗?
添加 :
如果不可能,那么在 C++ 中打开test.luausingluaL_loadfile然后创建 getter/setter 方法以num在脚本A和之间共享变量是个好主意B吗?
例如像这样,
脚本A: …
我的代码:
lua_State *L = luaL_newstate();
luaL_openlibs(L);
lua_settop(L, 0);
//Script A
luaL_dostring(L, "A = {} A.num = 3");
//Script B
luaL_dostring(L, "B = {} function B.update() return A.num * 2 end");
//Script C
luaL_dostring(L, "print(B.update())");
lua_close(L);
Run Code Online (Sandbox Code Playgroud)
结果: 6
但是,如果我像下面这样制作表A和B本地:
lua_State *L = luaL_newstate();
luaL_openlibs(L);
lua_settop(L, 0);
//Script A
luaL_dostring(L, "local A = {} A.num = 3");
//Script B
luaL_dostring(L, "local B = {} function B.update() return A.num * 2 end");
//Script C
luaL_dostring(L, "print(B.update())");
lua_close(L);
Run Code Online (Sandbox Code Playgroud)
它不输出任何东西.
如何使第二个代码工作,两者之间更有推荐的设计? …
我了解到package.preload可以用来将一个脚本公开给其他脚本。
这是我的示例代码。
lua_State *L = luaL_newstate();
luaL_openlibs(L);
lua_settop(L, 0);
//Script A
luaL_dostring(L, "local A = {} package.preload['A'] = function () return A end A.num = 3");
//Script B
luaL_dostring(L, "local A = require 'A' print(A.num)");
lua_close(L);
Run Code Online (Sandbox Code Playgroud)
结果:3
虽然这工作正常,但我想知道 ScriptA的代码是否可以更加简化,或者是否有其他替代解决方案将脚本公开给其他脚本。
补充:我问这个的主要原因是因为我认为package.preload['A'] = function () return A end写起来很长而且很无聊。
我想在Lua中重命名一些变量以便于使用。
我可以简单地使用不同的名称来创建别名,但是我担心会浪费一些内存。
在这种情况下,我可以简单地分配nil给旧变量吗?
这是我的示例代码:(尝试重命名my.tab为myTab)
print(type(my.tab))
myTab = my.tab
my.tab = nil
print(type(my.tab))
print(type(myTab))
Run Code Online (Sandbox Code Playgroud)
结果:
table
nil
table
Run Code Online (Sandbox Code Playgroud)
尽管这种方法似乎可行,但我想问一下这是否是一种安全且正确的方法来重命名Lua中的变量。
我正在尝试从中找出最小的vector<int>元素vector<vector<int>>。
这是我的代码,但是将向量迭代两次。
#include <iostream>
#include <vector>
#include <limits>
int main()
{
std::vector<std::vector<int>> foo = {{1,2,3,4}, {1,2}, {1,2,3,4,5}, {1,2,3}};
size_t smallestNumElems = std::numeric_limits<size_t>::max();
for (size_t i = 0; i < foo.size(); ++i)
{
const size_t numElems = foo[i].size();
if (smallestNumElems > numElems)
smallestNumElems = numElems;
}
for (size_t i = 0; i < foo.size(); ++i)
{
if (smallestNumElems == foo[i].size())
{
for (size_t j = 0; j < foo[i].size(); ++j)
std::cout << foo[i][j] << '\n';
break;
} …Run Code Online (Sandbox Code Playgroud) 是否可以func在main()没有实际功能的情况下以某种方式声明函数并将其分配给函数指针add()?
当前代码:
#include <iostream>
int add(int a, int b)
{
return a + b;
}
int main()
{
typedef int (*funcPtr)(int a, int b);
funcPtr func = &add;
std::cout << func(2,3) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
首选样式:(如果可能)
#include <iostream>
int main()
{
typedef int (*funcPtr)(int a, int b);
funcPtr func = (funcPtr){return a + b}; // is something like this possible?
std::cout << func(2,3) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法像我上一个代码一样动态地将函数分配给函数指针?
我想知道直接投射bool到float是否可以安全使用。
这是我的代码:
#include <iostream>
using namespace std;
int main()
{
bool b1 = false;
bool b2 = true;
float f1 = static_cast<float>(b1);
float f2 = static_cast<float>(b2);
cout << "False in float : " << f1 << endl;
cout << "True in float : " << f2 << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果:
False in float : 0
True in float : 1
Run Code Online (Sandbox Code Playgroud)
结果在所有C ++编译器和平台上都一样吗?
我混淆是否N在vector::reserve(N)是元素,它预计要在电流矢量的大小或者所述载体的总空间的顶部增加的号码。
例如,
#include <iostream>
#include <vector>
int main()
{
std::vector<int> foo;
foo.reserve(3);
foo.push_back(1);
foo.push_back(2);
foo.push_back(3);
foo.reserve(foo.size() + 2);// Should this be foo.reserve(2)?
foo.push_back(4);
foo.push_back(5);
}
Run Code Online (Sandbox Code Playgroud)
应该foo.reserve(foo.size() + 2)是公正的foo.reserve(2)吗?
我正在尝试将玩家(THREE.Object3d())的位置和旋转值线性插值到所需的(THREE.Vector3())。
这是我的代码:
player.position.lerp(desiredPosition, 0.2);
player.rotation.lerp(desiredRotation, 0.2);
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
未捕获的类型错误:player.rotation.lerp 不是函数
我知道有一个player.quaternion.slerp()函数,但是有没有办法x, y, z在不使用四元数的情况下插入旋转值?
如果没有,我怎样才能将desiredRotation( THREE.Vector3())转换为THREE.Quaternion()这样我就可以使用该slerp()函数了?