小编xax*_*xon的帖子

Clang不会编译gcc会模板化的专门化

Gcc编译好了,但是Clang(trunk)拒绝了这个消息:

<source>:7:8: error: class template partial specialization is not more specialized than the primary template [-Winvalid-partial-specialization]
Run Code Online (Sandbox Code Playgroud)

https://godbolt.org/g/h8rsWC

template<class T, T x>
struct S{};

template<int& x>
struct S<int&, x> { };
Run Code Online (Sandbox Code Playgroud)

这段代码是否正确?

c++ gcc clang template-specialization language-lawyer

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

dynamic_cast真的适用于多重继承吗?

我想看看是否可以创建"接口",继承它们,然后在运行时检查是否有任何随机类实现了该接口.这就是我所拥有的:

struct GameObject {
    int x,y;
    std::string name;

    virtual void blah() { };
};

struct Airholder {
   int oxygen;
   int nitrogen;
};

struct Turf : public GameObject, public Airholder {
   Turf() : GameObject() {
      name = "Turf";
   }

   void blah() { };
};

void remove_air(GameObject* o) {
   Airholder* a = dynamic_cast<Airholder*>(o);
   if(!a) return;
   a->oxygen   = 0;
   a->nitrogen = 0;
};
Run Code Online (Sandbox Code Playgroud)

现在,它的工作原理.文档说它工作正常,测试示例有效.但是,直到我向GameObject添加了一个虚方法,它才编译.问题是,我真的不知道该功能是否打算像这样使用.是什么让我想知道我必须为我正在检查的类声明一个虚函数.但显然,没有,我正在检查的类本身没有虚函数,实际上我的整个代码与虚函数无关,这是一种完全不同的方法.

所以,我想我的问题是:如果我正在做的事情真的有效,为什么我需要一个虚拟函数给我的班级一个vtable?为什么我不能将类声明为"运行时类型"或没有虚函数的东西?

c++ polymorphism multiple-inheritance

6
推荐指数
2
解决办法
8233
查看次数

OpenGL GL_POLYGON凹面多边形不会着色

当我尝试在OpenGL中使用Polygon时遇到问题.我不知道如何解释这个,但我的所有顶点都与开头的顶点相关联.当我尝试着色对象时会发生问题.我想绘制一个简单的对象.

void TOP (float x1, float y1, float x2, float h,float n)
{
  float r = x2-x1;
  if(n==1){glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);} // FOR FILL OR NO FILL OBJECT
  glBegin(GL_POLYGON);
     glVertex2f(x1,y1);
     glVertex2f(x2,y1);
     glVertex2f(x2,y1+h/7);
     y1=y1+h/7;
     glVertex2f(x2-r/5,y1+h/7);
     x2=x2-r/5; y1=y1+h/7;
     glVertex2f(x2,y1+2*h/7);
     y1=y1+2*h/7;
      glVertex2f(x2+r/5,y1+h/7);
      y1=y1+h/7; x2=x2+r/5;
      glVertex2f(x2,y1+2*h/7);
cout<<y1<<endl;
      y1=y1+2*h/7;
       glVertex2f(x2-r/5,y1); x2=x2-r/5;
      glVertex2f(x2,y1-h/7); y1=y1-h/7;
      glVertex2f(x2-r/5,y1);x2=x2-r/5;
      glVertex2f(x2,y1+h/7); y1=y1+h/7;
      glVertex2f(x2-r/5,y1);x2=x2-r/5;

       glVertex2f(x2,y1-h/7); y1=y1-h/7;
       glVertex2f(x2-r/5,y1);x2=x2-r/5;
        glVertex2f(x2,y1+h/7); y1=y1+h/7;
         glVertex2f(x2-r/5,y1);x2=x2-r/5;
         glVertex2f(x2,y1-2*h/7);y1=y1-2*h/7;
         glVertex2f(x2+r/5,y1-h/7);y1=y1-h/7; x2=x2+r/5;
         glVertex2f(x2,y1-2*h/7); y1=y1-2*h/7;
         glVertex2f(x2-r/5,y1-h/7); y1=y1-h/7;x2=x2-r/5;
          glVertex2f(x2,y1-h/7);

  glEnd();
}
Run Code Online (Sandbox Code Playgroud)

输出:

http://i.stack.imgur.com/BLMSJ.png

c c++ opengl drawing polygon

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

通过价值获取例外 - gcc和clang不同意

考虑这个简短的片段:

struct B {
    B() = default;
    explicit B(B const& ) { }
};

struct D : B { };

int main() {
    try {
        throw D{};
    }
    catch(B ) {
    }
}
Run Code Online (Sandbox Code Playgroud)

gcc接受此代码,clang认为它格式不正确:

main.cpp:17:13: error: no matching constructor for initialization of 'B'
    catch(B ) {
            ^
Run Code Online (Sandbox Code Playgroud)

谁是对的?

c++ gcc exception-handling clang language-lawyer

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

在 GTest 中,如何检查非常接近 0 的数字?EXPECT_FLOAT_EQ 不起作用

我有一些计算 (a)sin/(a)cos 值的代码,这些值预计非常接近 0,但是当我说

EXPECT_FLOAT_EQ(my_computed_var, 0);
Run Code Online (Sandbox Code Playgroud)

我收到如下错误:

/path/to/my/test.cpp:148: Failure
      Expected: my_computed_var
      Which is: 9.9920072e-16
      To be equal to: 0
Run Code Online (Sandbox Code Playgroud)

我该怎么做?对于其他数字,我也收到这种类型的“错误”: -4.3711388e-08

寻找有关处理此类浮点错误的具体建议和一般信息。

c++ unit-testing googletest

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

使用 boost 创建具有自定义环境的子进程

文档提升没有提供任何使用自定义环境创建子进程的示例process::child(...)
给出了一个示例,process::system(...)但该函数的system可能操作较少(例如管道或 waitpid),因此如果可能的话,我希望有一个完整的示例process::child

c++ boost boost-process

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

如何使用在托管资源组内具有权限的身份来部署托管应用程序?

将市场托管应用程序产品/服务部署到客户订阅中时,您可以在与托管应用程序关联的托管资源组中创建一个标识。但是,为了使该身份具有任何权限,必须为其分配角色。

当发布者和客户位于同一租户中时,可以按预期创建 roleAssignment,并且身份在托管资源组内具有权限。

但是,当客户位于不同的租户(和活动目录)中时,我会收到以下错误:

在租户“[PUBLISHER TENANT ID]”中找不到主体。如果您尝试将此角色分配放入租户“[CUSTOMER TENANT ID]”中,则必须指定 delegatedManagedIdentityResourceId 属性

看看上面提到的delegatedManagedIdentityResourceId,它很快就会变得非常棘手,我不确定这就是我想要走的路,或者它是否能让我到达我需要的地方,即在托管资源组中拥有一个身份,有权在托管资源组内执行读/写操作。

谢谢。

azure azure-managed-identity azure-managed-app

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

如何检查对rspec中构造函数调用的方法的调用?

如果我有一个构造函数调用另一个函数的类,我如何检查它被调用和正确的次数?

class MyClass
  def initialize(count)
    count.times{self.do_something}
  end

  def do_something
    # whatever
  end

end
Run Code Online (Sandbox Code Playgroud)

我想说点什么

n = 4
MyClass.new(n).should_receive(:do_something).exactly(n).times
n = 2
MyClass.new(n).should_receive(:do_something).exactly(n).times
Run Code Online (Sandbox Code Playgroud)

但是失败是因为在do_receive被附加到它之前调用了do_something(至少我认为这就是原因).

expected: 4 times with any arguments
received: 0 times with any arguments
Run Code Online (Sandbox Code Playgroud)

或者从构造函数中调用这样的东西是错误的,我应该重构?

此外,这个问题与此非常相似:

rspec:如何存根构造函数调用的实例方法?

但是我希望在过去的5年里,答案比设置存根new呼叫的手动实现要好.

ruby rspec

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

为什么 mmap 失败?

具体来说,我得到了一个实际地址0x000000368d76c0。我正在尝试将mmap其纳入我的程序中。我正在使用的代码是

void *mmap64;
off_t offset = 0x000000368d76c0;
int memFd = open("/dev/mem", O_RDWR);
if (-1 == memFd)
  perror("Error ");

mmap64 = mmap(0, sizeof(uint64_t), PROT_WRITE | PROT_READ, MAP_SHARED, memFd, offset);
if (MAP_FAILED == mmap64) {
  perror("Error ");
  return -1;
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,当我运行此代码时,我遇到了失败mmap。具体是这样说的Error Invalid argument。我很确定这是因为价值offset,但我不知道它有什么问题。

我将不胜感激任何帮助。

c mmap linux-device-driver linux-kernel

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

c ++如何检查ostringstream是否为空

我想检查 ostringstream 对象是否为空,即它不包含任何字符序列?

我检查了 ostringstream 的 cpp 参考,但我仍然不清楚。

c++ std

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