小编che*_*kow的帖子

如何更改LaTeX Beamer中的项目符号图像

当我使用itemize环境时,即

\begin{itemize} 
    \item one
    \item two
    \item three
\end{itemize}
Run Code Online (Sandbox Code Playgroud)

子弹点是丑陋的位图图形,具有刺耳(锯齿)边缘.我希望它是一个漂亮,干净的字体字符或矢量图形

latex beamer

51
推荐指数
5
解决办法
9万
查看次数

为什么派生的模板类不能访问基本模板类的标识符?

考虑:

template <typename T>
class Base
{
    public:
        static const bool ZEROFILL = true;
        static const bool NO_ZEROFILL = false;
}

template <typename T>
class Derived : public Base<T>
{
    public: 
        Derived( bool initZero = NO_ZEROFILL );    // NO_ZEROFILL is not visible
        ~Derived();
}
Run Code Online (Sandbox Code Playgroud)

我无法用GCC g ++ 3.4.4(cygwin)编译它.

在将这些转换为类模板之前,它们是非泛型的,派生类能够看到基类的静态成员.在C++规范的要求中是否会失去可见性,还是需要使用语法更改?

据我了解,每个实例Base<T>都会有它自己的静态成员" ZEROFILL"和" NO_ZEROFILL",这Base<float>::ZEROFILLBase<double>::ZEROFILL是不同的变量,但我真的不关心; 常量是为了代码的可读性.我想使用静态常量,因为在名称冲突而不是宏或全局方面更安全.

c++ templates c++-faq derived-class

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

全局热键X11/Xlib

我的目标是让一个程序在后台休眠,但可以由用户通过一些"热键"激活.从挖掘Xlib手册和Xlib O'reilly手册开始,我认为正确的方法是使用XGrabKey.但是我对这个过程的理解是不正确的,因为简单的概念证明不起作用.

我的理解是,如果我叫XGrabKey与根窗口作为grab_window和owner_events假,每当我的热键按下事件,然后将发送到根窗口.如果我然后从根窗口选择KeyPress事件,然后侦听X事件,我应该在按下热键时获得按键事件.我在下面粘贴了一个最小的例子.

我期望的是,当程序运行时,无论哪个窗口有焦点,如果按下Ctrl + Shift + K,我的程序应输出"热键被按下!" 在控制台中,然后终止.

此外,我的理解是,如果XGrabKey失败,默认错误处理程序将显示一条消息,因为它不是我假设调用成功.

显然,我的理解在某种程度上是有缺陷的.谁能指出我正确的方向?

#include <iostream>
#include <X11/Xlib.h>
#include <X11/Xutil.h>


using namespace std;


int main()
{
    Display*    dpy     = XOpenDisplay(0);
    Window      root    = DefaultRootWindow(dpy);
    XEvent      ev;

    unsigned int    modifiers       = ControlMask | ShiftMask;
    int             keycode         = XKeysymToKeycode(dpy,XK_Y);
    Window          grab_window     =  root;
    Bool            owner_events    = False;
    int             pointer_mode    = GrabModeAsync;
    int             keyboard_mode   = GrabModeAsync;

    XGrabKey(dpy, keycode, modifiers, grab_window, owner_events, pointer_mode,
             keyboard_mode);

    XSelectInput(dpy, root, KeyPressMask );
    while(true)
    {
        bool shouldQuit = false;
        XNextEvent(dpy, …
Run Code Online (Sandbox Code Playgroud)

x11 hotkeys xlib

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

在eclipse CDT中自定义包含警戒

有没有办法在eclipse CDT中为类生成模板自定义包含保护的格式?目前的格式是<Class Name>_H,但我想要的是什么样的<namespace>_<namespace>_<class name>_H.并不是说我希望在我自己的项目中的不同名称空间中具有相同名称的类,但是如果出现这种情况,我宁愿不担心它.

eclipse-cdt include-guards

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

当它们在LaTeX数学中的行之间分割时,如何使括号匹配高度?

请考虑以下示例

\begin{equation}
    \begin{split}
        f = & \left( \frac{a}{b} + \right. \\
                   & \left. c \right) + d 
    \end{split}
\end{equation}
Run Code Online (Sandbox Code Playgroud)

在结果中,第一行的左括号非常大,因为里面的分数.在第二行中,由于没有分数,因此括号很小.

如何使第二行的那个匹配第一行的高度?

latex split tex parentheses

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

变量引用(别名)是否会影响运行时成本?

也许这是编译器特定的东西.如果是这样,gcc(g ++)怎么样?如果您使用这样的变量引用/别名:

int x = 5;
int& y = x;
y += 10;
Run Code Online (Sandbox Code Playgroud)

它实际上需要比我们不使用引用更多的周期.

int x = 5;
x += 10;
Run Code Online (Sandbox Code Playgroud)

换句话说,机器代码是否发生变化,或者"别名"是否仅在编译器级别发生?

这似乎是一个愚蠢的问题,但我很好奇.特别是在可能暂时重命名某些成员变量以便数学代码更易于阅读的情况下.当然,我们并没有在这里谈论瓶颈......但这是我正在做的事情,所以我只是想知道是否存在任何"实际"差异......或者它是否只是化妆品.

c++ alias runtime reference

13
推荐指数
3
解决办法
2482
查看次数

共享对象在主二进制文件C++中找不到符号

我正在尝试为我编写的程序制作一种插件架构,并且在我第一次尝试时遇到了问题.是否可以从共享对象中访问主可执行文件中的符号?我认为以下情况会很好:

testlib.cpp:

void foo();
void bar() __attribute__((constructor));
void bar(){ foo(); }
Run Code Online (Sandbox Code Playgroud)

testexe.cpp:

#include <iostream>
#include <dlfcn.h>

using namespace std;

void foo()
{
    cout << "dynamic library loaded" << endl;    
}

int main()
{
    cout << "attempting to load" << endl;
    void* ret = dlopen("./testlib.so", RTLD_LAZY);
    if(ret == NULL)
        cout << "fail: " << dlerror() << endl;
    else
        cout << "success" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译:

g++ -fPIC -o testexe testexe.cpp -ldl
g++ --shared -fPIC -o testlib.so testlib.cpp
Run Code Online (Sandbox Code Playgroud)

输出:

attempting …
Run Code Online (Sandbox Code Playgroud)

c++ shared-objects dlopen

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

成员`...'的请求在g ++中是不明确的

我在我的一个类中使用gcc 3.4.5(mingw)得到以下编译错误:

src/ModelTester/CModelTesterGui.cpp:1308: error: request for member `addListener' is ambiguous
include/utility/ISource.h:26: error: candidates are: void utility::ISource<T>::addListener(utility::IListener<T>*) [with T = const SConsolePacket&]
include/utility/ISource.h:26: error:                 void utility::ISource<T>::addListener(utility::IListener<T>*) [with T = const SControlPacket&]
Run Code Online (Sandbox Code Playgroud)

希望你能看到这ISource<T>是一个模板接口,它只是表明该对象可以是某个匹配类型的对象的informer IListener<T>.让我烦恼的是这个想法,由于某种原因,功能是模棱两可的,据我所知,它们不是.addListener()对于不同的输入类型IListener<const SConsolePacket&>,该方法会被重载IListener<const SControlPacket&>.用法是:

m_controller->addListener( m_model );
Run Code Online (Sandbox Code Playgroud)

m_model指向IRigidBody对象的指针在哪里,并且IRigidBody仅从,IListener< const SControlPacket& >并且绝对不是从IListener< const SConsolePacket& >

作为一个完整性检查,我使用doxygen来生成类层次结构图,并且doxygen同意我的IRigidBody不同意IListener< const SConsolePacket& >

显然,我对c ++中的继承性的理解并不完全正确.我的印象是IListener<const SControlPacket&>,它IListener<const SConsolePacket&>是两种不同的类型,而且是函数声明

addListener(IListener<const SConsolePacket&>* listener)
Run Code Online (Sandbox Code Playgroud)

和 …

c++ gcc g++ ambiguous

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

如何跟踪(枚举)实现接口的所有类

我有一种情况,我有一个界面,定义某个类的行为,以填补我的程序中的某个角色,但在这个时间点,我不是100%肯定我将编写多少个类来填补该角色.但是,与此同时,我知道我希望用户能够从GUI组合/列表框中选择实现他们想要用来填充某个角色的界面的具体类.我希望GUI能够枚举所有可用的类,但是每当我决定实现一个新类来填充该角色时,我宁愿不必返回并更改旧代码(这可能是几个月之后)

我考虑过的一些事情:

  1. 使用枚举
    • 优点:
      1. 我知道该怎么做
    • 缺点
      1. 添加新类时,我将不得不更新枚举更新
      2. 难以迭代
  2. static在接口中使用某种列表对象,并在实现类的定义文件中添加新元素
    • 优点:
      1. 不必更改旧代码
    • 缺点:
      1. 甚至不确定这是否可行
      2. 不确定要存储什么样的信息,以便工厂方法可以选择正确的构造函数(可能是字符串和返回指向接口对象的指针的函数指针之间的映射)

我猜这是一个问题(或类似的问题),更有经验的程序员可能在之前(经常)遇到过,并且这种问题可能有一个共同的解决方案,这几乎肯定比任何我都好.能够想出来的.那么,我该怎么做?

(PS我搜索过,但我发现的都是这个,而且它不一样:我如何枚举所有实现通用接口的项目?看来他已经知道如何解决我想弄清楚的问题了.)

编辑:我将标题重命名为"我怎样才能跟踪......",而不仅仅是"我怎么能枚举......"因为原来的问题听起来像是我对检查运行时环境更感兴趣,我在哪里真正感兴趣的是编译时簿记.

c++ class enumerate

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

如果两个线程读取和写入同一块内存会发生什么

我的理解是,如果两个线程从同一块内存中读取,并且没有线程正在写入该内存,那么操作是安全的.但是,我不确定如果一个线程正在读取而另一个正在写入会发生什么.会发生什么?结果是否未定义?或者阅读是否陈旧?如果陈旧的读取不是一个问题,是否可以对变量进行非同步读写?或者数据是否可能被破坏,读取和写入都不正确,在这种情况下应该始终同步?

我想说我已经知道这是后一种情况,内存访问的竞争使状态未定义......但我不记得我在哪里学到了这些并且我很难找到在谷歌上回答.我的直觉是变量在寄存器中操作,并且真实(如在硬件中)并发是不可能的(或者是它),因此可能发生的最坏情况是陈旧数据,即以下内容:

WriteThread: copy value from memory to register
WriteThread: update value in register
ReadThread:  copy value of memory to register
WriteThread: write new value to memory
Run Code Online (Sandbox Code Playgroud)

此时读取线程具有陈旧数据.

concurrency memory-access

7
推荐指数
2
解决办法
7884
查看次数