小编Bar*_*ack的帖子

获取可执行文件的路径(使用 std::filesystem)

在我被标记为重复之前,我能找到的所有类似问题在引入 std::filesystem 之前都有答案,并且使用特定于平台的代码或 Boost::filesystem。我正在寻找一个使用 std::filesystem 的便携式答案。


是否可以使用 std::filesystem 获取 C++ 可执行文件所在的路径(而不是工作目录)?如果是的话,怎么样?

c++ c++17 std-filesystem

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

使用 C++ 在 Windows 10 壁纸上绘图

有没有办法在 C++ 中处理 Windows 的墙纸(图标后面)以便在它上面绘图?这将允许制作等效的活动桌面(在 Windows XP 之后停止使用)、等效的墙纸引擎或任何其他类似工具。(在我的情况下,墙纸上的温度和资源使用情况监控)。

注意:返回的句柄返回GetDesktopWindow()桌面图标级别的窗口,而不是在它后面。

类似问题的解决方案对我不起作用。具体来说,我尝试了 VLC 媒体播放器的墙纸模式代码。

关键代码是:

hwnd = FindWindow( _T("Progman"), NULL );
 if( hwnd ) hwnd = FindWindowEx( hwnd, NULL, _T("SHELLDLL_DefView"), NULL );
 if( hwnd ) hwnd = FindWindowEx( hwnd, NULL, _T("SysListView32"), NULL );
 if( !hwnd )
 {
     msg_Warn( p_vout, "couldn't find \"SysListView32\" window, "
               "wallpaper mode not supported" );
     return;
 }
Run Code Online (Sandbox Code Playgroud)

但它不会在壁纸上绘制。

c++ windows winapi desktop-wallpaper

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

进入振奋精神;齐还是X3?

我正在和一个朋友为一个小型个人项目做翻译;我们开始实现所有的类和一般结构,在这些结构中代码将被翻译,然后执行只是为了将实际的解析代码推迟到这些结构中。

现在我们必须构建解析器,经过一番搜索,我发现到处都是关于灵气和灵气 X3 的帖子和人,好像它们是(我认为它们是)两种不同的方式来制作解析器,但没有一个说不同,哪个更近,我应该从哪个开始。

目的是,给定一个代码字符串,输出最终错误,如果一切都遵守语法和逻辑,则将代码转换为我们已经构建的类的树。我们想在解析过程中检查一致性,例如“您正在使用未声明的变量”类型的错误。

我不确定这两个库如何以不同的方式对待事物。

boost-spirit boost-spirit-qi boost-spirit-x3

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

虚拟类作为带有 Spirit 的 AST 节点

我正在和一个朋友一起研究一种语言的解释器,我们从一个我猜不是那么明智的决定开始:我们首先制作了所有要执行的元素(实际上是一个由不同类组成的树);但是现在查看 boost 示例,我对如何合并两者感到很困惑。我知道从什么开始(语法),我知道要达到什么(实例化的类彼此拥有),我不知道如何达到它。

我们从没有变量的表达式开始,因此我们查看了精神计算器示例;但我不明白什么时候实例化元素。

表达项示例:

namespace exp
{
class op
    {
    private:
    public:
        virtual double exec(function_scope &fs);

    };

class operand : public op
    {
    private:
        double value;

    public:
        operand(double value);
        double exec(function_scope &fs);
    };

class op_bin : public op
    {
    private:
    public:
        op * ll;
        op* rr;
        op_bin(op* ll, op* rr);
        ~op_bin();
    };

namespace bin
    {
    class sum : public op_bin
        {
        public:
            sum(op* ll, op* rr);
            double exec(function_scope &fs);
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

忽略 exec 函数,它在运行时使用。

例如,代码 5 + (2 …

c++ abstract-syntax-tree boost-spirit

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

是否为C ++提供了类似C的语法脚本语言解释器?

我很早以前就开始在动态图形可视化器,编辑器和算法测试平台(具有节点和弧线的图形,而非其他图形)上工作。对于算法测试平台,我需要让用户编写脚本或从文件中调用脚本,这将与当前加载的图形进行交互。可视化工具会执行一些操作,例如在脚本算法访问节点时点亮节点,并增加一些人为延迟,以可视化导航和处理算法的算法。其次,脚本还将用于添加第三方功能,这些功能既可以作为程序文件夹中的预先存在的脚本使用,也可以在经过测试和工作后,以c ++的形式集成到程序内部。

我在搜索程序中嵌入的所有搜索内容都将我带到了lua;然后,我开始为自己的类似C的语法脚本语言手写我自己的递归下降解析器(我计划使用C ++语法的子集,以便可以将用我的脚本语言编写的任何代码复制粘贴到任何C ++代码中。一个有趣的疯狂想法,我一点也不后悔,我有范围,函数,循环,gotos,类型安全变量,表达式。

但是现在我要增加类,类方法,继承(将默认脚本连接到程序需要一些默认类),我意识到这将花费很多时间和精力。对于一个有考试的未毕业学生的个人项目来说,这有点太多了……但是我还是希望完成这个项目。

脚本自身强加100%与C ++兼容的要求几乎是必要的,这将是一件不错的事情,我可以做不到。

现在的问题是,是否可以用类似c的语法替代lua,以支持我已经做过的所有事情以及类和继承?(必须将接口脚本的自定义“类”添加到程序中)

(我不能假设用户安装了完整的c ++编译器,所以我不能在运行时将其“脚本”编译为dll来加载和调用它,尽管我希望可以)

c++ interpreter scripting-language

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