要了解C++是否是我的项目的正确语言,我想测试UTF-8功能.根据参考资料,我建立了这个例子:
#include <string>
#include <iostream>
using namespace std;
int main() {
wstring str;
while(getline(wcin, str)) {
wcout << str << endl;
if(str.empty()) break;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是当我输入一个UTF-8字符时,它行为不端:
$ > ./utf8
Hello
Hello
für
f
$ >
Run Code Online (Sandbox Code Playgroud)
它不仅不会打印ü,而且会立即退出.gdb告诉我没有崩溃,但正常退出,但我发现很难相信.
我想问一下是否有人能给我一些我想做的设计决定的提示.
我的项目将包含一些精灵(一次在屏幕上预期10到30个),并且有几种方法可以实现它们.一种方法是CSS-Sprites,另一种方法是在画布上绘制它们.两者都不难.背景将是另一个<canvas>在后台绘制的图块地图.
我已经看到Crafty附加了Sprites,<div>因为它在HTML中<canvas>作为CSS-Sprite.我不确定如果<div>在画布中是否存在速度差异.有区别吗?
我希望用户通过鼠标点击,左,右等与精灵交互.精灵当然是在瓷砖地图的元素上站立或行走.那么编写一个处理程序<canvas>并找到精灵更有效率,或者更确切地说使用<div>并让浏览器处理这个发现?
我希望我可以传达我的问题.
我不想使用GLUT,因为它没有类似Haskell的感觉.IORef由于回调,它基本上迫使你使用等等.
我考虑过GLFW,这似乎很简单,让我在monad中进行游戏循环.但它似乎有不同的硬件问题,例如,它在我的笔记本电脑上工作正常,但不在我的桌面上.在窗户上,纹理消失了.
所以我想通过SDL进入,但是Windows依赖关系可能存在问题,我只是不知道需要哪个DLL.
那么打开OpenGL窗口还剩下什么呢?
在我的猫鼬模型中,我有一些stats依赖于时间.我的想法是在模型加载后立即添加一个中间件来更改这些统计信息.
不幸的是,关于post-Hooks 的文档有点缺乏清晰度.好像我可以使用这样的钩子:
schema.post('init', function(doc) {
doc.foo = 'bar';
return doc;
});
Run Code Online (Sandbox Code Playgroud)
他们唯一的例子涉及 - console.log输出.它不以任何方式解释是否doc必须返回或者后挂钩的变化根本不可能(因为它不是异步的,因此对于复杂的想法可能没什么用处).
如果preon 'init'不是在加载时自动更新模型的正确方法,那么它是什么?
我的boost :: spirit解析器还有另外一个问题.
template<typename Iterator>
struct expression: qi::grammar<Iterator, ast::expression(), ascii::space_type> {
expression() :
expression::base_type(expr) {
number %= lexeme[double_];
varname %= lexeme[alpha >> *(alnum | '_')];
binop = (expr >> '+' >> expr)[_val = construct<ast::binary_op<ast::add>>(_1,_2)]
| (expr >> '-' >> expr)[_val = construct<ast::binary_op<ast::sub>>(_1,_2)]
| (expr >> '*' >> expr)[_val = construct<ast::binary_op<ast::mul>>(_1,_2)]
| (expr >> '/' >> expr)[_val = construct<ast::binary_op<ast::div>>(_1,_2)] ;
expr %= number | varname | binop;
}
qi::rule<Iterator, ast::expression(), ascii::space_type> expr;
qi::rule<Iterator, ast::expression(), ascii::space_type> binop;
qi::rule<Iterator, std::string(), ascii::space_type> varname;
qi::rule<Iterator, …Run Code Online (Sandbox Code Playgroud) 我有一些我想使用的创意Commons GIF,但我需要它们作为单帧.但是,gif是优化的,所以当我把它拉开时
convert the.gif frames/%02d.tga
Run Code Online (Sandbox Code Playgroud)
一些图像只是片段不合适,并且比原始图像小.
那么有没有一种方法可以在查看器中查看单帧?
对于不在表面上的Rails部分,我不是很有经验.
我想要的是拥有一个会话cookie,该会话cookie的到期时间设置为session当用户离开浏览器或其他任何内容时到期.作为安全措施.
一个小问题,希望是一个很小的答案:
var我的班级中有一个需要在设置时触发某种更新.我知道var隐式获取两个方法,一个getter和一个setter.是否有可能以某种方式覆盖setter方法以确保更新被触发,而不会递归?我的意思是
def a_=(x: Any) = { a = x; update }
Run Code Online (Sandbox Code Playgroud)
可能是无限递归,对吗?
该var只设置类之外,只读类里面,也许有帮助.
谢谢收听.
假设我想为编程语言(EBNF已知)创建解析器,并希望尽可能少地完成它.另外,我想支持任何UTF-8字母的标识符.我想用C++.
flex/我bison有一个不存在的UTF-8支持,因为我读了它.ANTLR似乎没有可用的C++输出.
我考虑过boost :: spirit,他们在他们的网站上声明它实际上不适合完整的解析器.
还剩下什么?每手完全滚动?
在我阅读了关于boost :: spirit的教程之后,由于解析器组合器语法,我非常喜欢它.制作解析器非常简单.
遗憾的是,在从解析器中获取复杂数据结构的问题上,教程并不那么精确.我正试图进入Kaleidoscope AST.
无论如何,这是我的AST代码:
#ifndef __AST_HPP__
#define __AST_HPP__
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/variant/recursive_variant.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/variant/apply_visitor.hpp>
#include <string>
#include <vector>
namespace ast {
struct add;
struct sub;
struct mul;
struct div;
struct func_call;
template<typename OpTag> struct binary_op;
typedef boost::variant<double, std::string, boost::recursive_wrapper<binary_op<
add>>, boost::recursive_wrapper<binary_op<sub>>,
boost::recursive_wrapper<binary_op<mul>>, boost::recursive_wrapper<
binary_op<div>>, boost::recursive_wrapper<func_call>>
expression;
template<typename OpTag>
struct binary_op {
expression left;
expression right;
binary_op(const expression & lhs, const expression & rhs) :
left(lhs), right(rhs) {
}
};
struct …Run Code Online (Sandbox Code Playgroud) c++ ×4
boost-spirit ×2
utf-8 ×2
canvas ×1
css-sprites ×1
gif ×1
glfw ×1
glut ×1
haskell ×1
html5 ×1
imagemagick ×1
javascript ×1
linux ×1
mongoose ×1
node.js ×1
opengl ×1
parsing ×1
performance ×1
ruby ×1
scala ×1
sdl ×1
session ×1
stl ×1
templates ×1
wstring ×1