小编jay*_*ica的帖子

是否可以使用与std :: set中包含的不同类型的元素来执行搜索和删除?

假设我有以下内容:

struct MetadataThingy {

    void *actual_thingy;
    int some_metadata;
    int more_metadata;

    bool operator<(MetadataThingy const& other) const {
        return actual_thingy < other.actual_thingy;
    }

};
Run Code Online (Sandbox Code Playgroud)

其中actual_thingy指向一些重要数据,我希望容器按值actual_thingy而不是指向的元素的值排序,但是我需要存储一些关于它的其他数据,所以我MetadataThingy用一个只考虑的比较器创建了包装类actual_thingy指针的值(而不是使用容器void *)

现在,给出以下代码:

std::set<MetadataThingy> thingy_set;

void test() {

    MetadataThingy m1 { nullptr, 5, 20 };
    MetadataThingy m2 { &m1, 1, 2 };
    MetadataThingy m3 { &m2, 6, 0 };

    thingy_set.insert(m1);
    thingy_set.insert(m2);
    thingy_set.insert(m3);

    MetadataThingy m;
    m = *thingy_set.find(m2); // OK.
    m = *thingy_set.find(static_cast<void *>(&m2)); // Nope. Can't use a …
Run Code Online (Sandbox Code Playgroud)

c++ set stdset

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

Android Studio 中的工具提示消失得太快

我发现工具提示非常有用,除了它们消失的速度往往比我阅读较长的要快得多。我已经将它们设置为更快显示。是否有可能让它们停留更长时间,理想情况下直到我再次移动鼠标?

intellij-idea android-studio

5
推荐指数
0
解决办法
100
查看次数

在模板虚拟类层次结构中调用基类方法

假设我有以下类层次结构:

template< class T >
class TestBase {

public:

    virtual T const & do_foo() = 0;

};

template< class T >
class TestDerived : public virtual TestBase< T > {

public:

    virtual int do_bar() {
        return do_foo() + 1;
    }

};
Run Code Online (Sandbox Code Playgroud)

海湾合作委员会吐出以下内容:

error: there are no arguments to ‘do_foo’ that depend on a template parameter, so a declaration of ‘do_foo’ must be available [-fpermissive]
note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an …
Run Code Online (Sandbox Code Playgroud)

c++ virtual templates

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

如何从流中读取以空格分隔的单词?

在Common Lisp中,是否有一种简单的方法可以从输入流中读取单个以空格分隔的单词?基本上我正在寻找与C相当的东西scanf("%s", somevar);.

我确实想出了以下内容:

(defun read-word-from-stream (in)
  (peek-char t in) ; skip initial whitespace
  (do ((str (make-array 16 :fill-pointer 0 :element-type 'standard-char :adjustable t) 
            (progn (vector-push-extend (read-char in) str) str)))
      ((let ((c (peek-char nil in))) 
            (or (char= c #\Newline) (char= c #\Space))) str)))
Run Code Online (Sandbox Code Playgroud)

...虽然功能对我有限的需求,但对于如此简单的操作感觉有点笨拙.理想情况下,我会有一个方法为我做,但是使用任何可用的Common Lisp库(最好是与flexi-streams一起使用的东西),最简洁,最短的正确方法是什么?

lisp common-lisp

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

使用宏作为函数

我是Common Lisp的新手,所以这让我有点难过,Google让我失望了.

我有一个sizzle定义的功能

(defun sizzle (f &rest r) ...blah blah...)
Run Code Online (Sandbox Code Playgroud)

现在我只需要检查所有可选参数是否都是非零的,所以我自然而然

(apply #'and r)
Run Code Online (Sandbox Code Playgroud)

...然后事实证明这and不是一个函数,它是一个宏(我还没有到目前为止).

所以,我的问题是,有没有办法使用宏作为函数(很像上面),或者我应该只是创建自己的函数来检查所有值是否是给定的列表是非零的?或者还有另一种我没有想过的方法吗?

common-lisp

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

在OpenGL中共享顶点位置但不是法线

据我所知,每个顶点指定法线,而在OpenGL中,"顶点"不仅指空间中的点,还指其相关的法线(以及其他一些数据).对于诸如面部成直角的立方体的模型,这将是有问题的,因为每个几何顶点需要3个法线,每个面一个法线.显而易见的解决方案似乎只是为每个面指定4个不同的顶点和适当的法线(即不要在面之间共享顶点),但这种方法似乎非常浪费.有没有更好的方法让我实际上共享顶点位置而不共享法线?

opengl normals

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

多次分配中的丢失变量

假设我有一个foo返回固定长度列表的函数,并将返回的列表分配给少数变量,如下所示:

($duck, $lemonade, $stand, $grapes) = foo($waddle);
Run Code Online (Sandbox Code Playgroud)

但事实证明,我实际上并不想要$lemonade.我可以用下划线替换它来说我不需要值(它在其他一些编程语言中用于此目的),但由于它在Perl中具有隐含的特殊含义,我认为它可能是混乱的完全不好.

Perl是否有这种"一次性"变量的约定,或者是否有更多的Perly(perlish?)方式?或者更确切地说,鉴于这是Perl,还有其他方法吗?

perl

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