小编Vin*_*nce的帖子

C++:在类和超类之间共享字段

我对类和超类共享字段有点困惑.我原以为这是好的:

class SuperC {
 public:
     SuperC();
 protected:
     double value;
};

class C : public SuperC {
 public :
     C(double value);
};

SuperC::SuperC(){}
C::C(double value):SuperC(),value(value){}
Run Code Online (Sandbox Code Playgroud)

但是编译器告诉我C没有字段"value".C不继承SuperC中定义的那个?

很多

c++ inheritance field

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

自动生成所有子包/模块的API参考

我使用 mkdocs 和 mkdocstrings 插件来生成 Python 包的文档。

我的包裹以标准方式组织

- setup.py
- mkdocs.yaml
- docs/
- mypackage/
  - __init__.py
  - module1.py
  - module2.py
  - subpackage1/
     - __init__.py
     - submodule1.py
     - submodule2.py
- [...]
Run Code Online (Sandbox Code Playgroud)

mkdocs.yml

plugins:
  - mkdocstrings
nav:
  - API: references.md
Run Code Online (Sandbox Code Playgroud)

并在references.md

# API references

::: mypackage
Run Code Online (Sandbox Code Playgroud)

这不会生成任何文档(即“API”页面保持空白)

另一方面,这有效:

::: mypackage.module1
Run Code Online (Sandbox Code Playgroud)

跑步mkdocs build -v

DEBUG    -  mkdocstrings: Matched '::: mypackage'
DEBUG    -  mkdocstrings: Using handler 'python'
DEBUG    -  mkdocstrings: Collecting data
DEBUG    -  griffe: Found …
Run Code Online (Sandbox Code Playgroud)

python docstring mkdocs

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

带参数的 pytest 夹具

似乎可以将参数传递给装置:

将参数传递给固定功能

然而,在实现这个最小的示例时,我收到一个错误。

import pytest

@pytest.fixture
def my_fixture(v):
    print("fixture in")
    yield v+1
    print("fixture out")

@pytest.mark.parametrize("my_fixture",[1], indirect=True)
def test_myfixture(my_fixture):
    print(my_fixture)
Run Code Online (Sandbox Code Playgroud)

@pytest.fixture def my_fixture(v):未找到 E 固定装置“v”

上面的代码有什么问题吗?

(python 3.8.10,pytest-6.2.5)

python fixtures pytest

3
推荐指数
2
解决办法
8914
查看次数

codemirror:按Tab键时如何缩进整行?

我正在为codemirror创建一个新的简单模式.

我希望当用户按下"tab"时,整行会缩进(而不是仅仅是光标之后的行部分,"将行分成两行").

最简单的方法是什么?

注意:不必在模式中定义相应的代码.任何其他方法(例如添加或配置)也可以.

javascript codemirror codemirror-modes

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

javascript:具有"常量"整数作为键的函数字典

以下代码工作正常:

function a() { console.log("a"); };
function b() { console.log("b"); };

var F = {1:a,2:b};

F[1](); // log "a"
F[2](); // log "b"
Run Code Online (Sandbox Code Playgroud)

但这个没有:

function a() { console.log("a"); };
function b() { console.log("b"); };

var A = 1;
var B = 2;
var F = {A:a,B:b};

F[A](); // log "TypeError : F[A] is not a function"
Run Code Online (Sandbox Code Playgroud)

这个想法是A和B是常数整数,仅用于代码可读性.我知道javascript中没有"const",但你明白了.

什么是干净的方式来获得这样的工作?(如果A和B在最后有效地保持不变,我不在乎那么多,只是让它们大写表示我未来不会改变它们的价值).

javascript dictionary function-pointers constants

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

ansible 收集事实无法检索 ansible_distribution_release(“模块调用在 json 数据之后有垃圾”)

跑步:

ansible -m setup <hostname>
Run Code Online (Sandbox Code Playgroud)

(主机名是 ubuntu 20.04 桌面)

返回警告:

[警告]:在 JSON 数据之后模块调用有垃圾:AttributeError("module 'platform' has no attribute 'dist'")

并且输出不显示任何字段“ansible_distribution_release”。

正如预期的那样,使用此变量的任务失败:

'ansible_distribution_release' 未定义

我可能会错过什么?

编辑:该问题出现在 ansible 2.5.1 中,并通过运行较新版本的 ansible 解决,请参阅已接受的答案。

ansible ubuntu-20.04

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

对C++中的非纯虚拟类感到困惑,它们有什么用?

我有一个声明如下的类:

class TestFoo {
public:
    TestFoo();
    virtual void virtualFunction();
    void nonVirtualFunction();
};
Run Code Online (Sandbox Code Playgroud)

我尝试以这种方式实现

TestFoo::TestFoo(){}
void TestFoo::nonVirtualFunction(){}
Run Code Online (Sandbox Code Playgroud)

在编译时返回错误:

undefined reference to vtable for TestFoo
Run Code Online (Sandbox Code Playgroud)

我试过了 :

TestFoo::TestFoo(){}
void TestFoo::nonVirtualFunction(){}
void TestFoo::virtualFunction(){}
Run Code Online (Sandbox Code Playgroud)

编译确定与这些帖子的答案一致:

未定义的vtable参考

未定义的引用vtable

令我困惑的是,我认为声明虚函数的重点在于我不需要定义它.在这个例子中,我不打算创建任何TestFoo实例,而是创建从TestFoo继承的(具体)类的实例.但是,我仍然想为TestFoo的每个子类定义函数nonVirtualFunction.

我不对劲的东西?

谢谢 !

c++ virtual hyperlink vtable

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

C++字符串和内存管理

我现在正致力于一个涉及模拟机器人手臂控制的相当复杂的项目.我完成了项目的第一个版本,它工作正常.我刚刚添加了一些新代码,它们在每次迭代时收集有关系统的一些信息,将其保存在某些数组中,最后将所有内容打印在文件中以供以后分析.

现在,真正奇怪的事情正在发生.如果我定义将保存数据的文件如下:

const std::string SAVEFILE = "C:\\Users\\Vincent\\Desktop\\ta";
Run Code Online (Sandbox Code Playgroud)

一切正常,与我添加新代码之前完全相同(加上保存数据).

但如果我将其定义如下:

const std::string SAVEFILE = "C:\\Users\\Vincent\\Desktop\\tacit.txt";
Run Code Online (Sandbox Code Playgroud)

然后系统以另一种方式运行.不会崩溃,但机械臂的移动方式不同.

我试图评论使用SAVEFILE的所有代码,甚至是与数据保存相关的任何新代码,但问题仍然存在.

我知道只有这些信息,任何人都不可能告诉我什么是错的,但有人会有什么建议吗?认为长字符串会覆盖其他变量的值会有意义吗?怎么可能?干净的C++编程的一些准则我可能已经破坏了?

有些阵列是行为不端的声音,这是我检查的第一件事.我想它应该来自保存数据的数组,因为它们是唯一的新数据.事情就是,即使我评论所有相应的代码,也没有变化.

我尝试提供有关我的代码的更多信息.这里我首先使用SAVEFILE(runExperiment函数的最后一个参数)

int main(int argc, char *argv[])    {
  std::vector<Controller*> controllers;
  controllers.push_back(getConstrainedPDT(0,true));
  controllers.push_back(getConstrainedPDT(1,true));
  controllers.push_back(getConstrainedPDT(2,true));
  runExperiment(controllers,LENGTHS,WEIGHTS,RADIUS,ANGLEMIN,ANGLEMAX,MAXTORQUES,PUSHVECTOR,GRAVITY,RUNTIME,TIMESTEP,XTARGET,YTARGET,ITERATIONSAVEDATA,SAVEFILE);
  return 1;
}
Run Code Online (Sandbox Code Playgroud)

这里是函数的代码:

void runExperiment(std::vector<Controller*> controllers,const double * lengths, const double* weights, const double radius, const double* angleMin, const double* angleMax, const double* maxTorques,const double* pushVector,const dReal gravity,const dReal runTime,const dReal tstep,const dReal targetX,const dReal targetY,const int itSaveData,const std::string saveFile){

  endTime = runTime;
  simTime = 0.0;
  timeStep = …
Run Code Online (Sandbox Code Playgroud)

c++ memory string ode-library

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

Python 3:在类变量上使用"all"

以下是一些引发NameError的代码:

class Foo:
    a = [1,2,3,4,5]
    b = all(i for i in a) # works fine !
    c = [2,3,4]
    d = all(i in a for i in c) # raises NameError : name 'a' is not defined
Run Code Online (Sandbox Code Playgroud)

我很困惑 - ;

谢谢 !

python class static-members

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

编译器推断模板参数

template<typename T>
class A
{
    public:

    A(T &t)
    : t_(t){}

    T t_;
};


int main()
{
    int value;
    A<decltype(value)> a(value);
    // what I wish for : A a(value); 
    // which does not compile "missing template argument before 'a'"
}
Run Code Online (Sandbox Code Playgroud)

在 A (或其他地方)的声明中有没有办法提示编译器 T 应该自动解析为传递给构造函数的类型?

(理想情况下是 c++11,但很高兴听到不那么旧的版本)

c++ templates compilation decltype declval

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

c ++将模板化函数应用于元组的每个元素

template<typename T>
void print(T& t)
{
    std::cout << t << std::endl;
}

template<typename ... Args>
class Container 
{

    public:

    Container(Args&& ... args)
    : values_(std::forward<Args>(args)...)
    {}

    template<int INDEX>
    typename std::tuple_element<INDEX, std::tuple<Args...> >::type& get()
    {
        return std::get<INDEX>(values_);
    }

    void display()
    {
        // (obviously) does not compile !
        std::apply(print,values_);
    }

    private:
    std::tuple<Args ...> values_;

};
Run Code Online (Sandbox Code Playgroud)

上面的代码显示了意图但不正确(注释的地方),因为函数“print”需要一个模板。

有没有办法将(适当模板化的)打印函数调用到元组 values_ 的每个元素?

运行代码:https : //onlinegdb.com/SJ78rEibD

c++ templates apply variadic-templates stdtuple

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

C更改void指针表示的值

这是对这个问题的跟进: 有一个函数改变指针在C中表示的值

作为练习,我试图创建一个通用函数来更改未确定类型的数组中的值.我猜它应该是这样的.

void set_value(void * data, void * value, size_t size, int index){
    void * position = data + index*size;
    *position = *value;
}
Run Code Online (Sandbox Code Playgroud)

当然不编译,*position =*value不使用值大小的信息(这里假设数据和值都指向size_t大小的smthg).

我想对我的程序说的是:"获取按值指向的大小的内存块并将其复制到位置指向的地址"

c pointers void-pointers

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

谷歌测试:无法从char数组创建字符串?

我运行这个测试:

TEST_F(CHAR_TESTS, wtf){
  char letter[3] = {'A','B','C'};
  char types[2] = {'o','s'};
  char tmp[3];
  for(int i=0;i<3;i++){
    for(int j=0;j<3;j++){
      for(int k=0;k<2;k++){
        tmp[0]=letter[i];
        tmp[1]=letter[j];
        tmp[2]=types[k];
        std::string combination(tmp);
        std::cout << combination << std::endl;
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,这打印这个:

AAo~
AAs~
ABo~
ABs~
ACo~
ACs~
BAo~
BAs~
BBo~
BBs~
BCo~
BCs~
CAo~
CAs~
CBo~
CBs~
CCo~
CCs~
Run Code Online (Sandbox Code Playgroud)

我不认为这是打印本身的问题,因为我注意到一些测试比较了char数组生成的字符串没有通过,我最终做到这一点,我无法弄清楚为什么.所以感觉确实"组合"字符串最终没有预期的内容.

"常规"可执行文件(不是gtest)中的相同代码打印出预期的内容(没有奇怪的补充字符的3个字符).

c++ string char googletest

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