小编Had*_*ber的帖子

Cmake add_compile_definitions 但适用于所有目标

有没有办法在 cmake 中为创建的所有目标创建定义。到目前为止当我

add_compile_definitions(MYDEFINITION)
Run Code Online (Sandbox Code Playgroud)

在我的根 CmakeLists.txt 中,它似乎只为该文件中创建的目标创建这些定义。但我想为子目录中创建的所有目标创建定义。做这个的最好方式是什么?

c c++ cmake

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

我是否错过了某些内容?还是虚拟通话的效果不如人们对它们的评价

我一直在为嵌入式环境开发一个简单的框架。我决定要使用虚拟调用,CRTP还是使用switch语句。有人告诉我vtables在嵌入式中的性能很差。
从这个问题开始, vvable性能下降vs. switch语句, 我决定运行自己的测试。我用三种不同的方法来调用成员函数。

  1. 使用etl库的etl :: function,该库旨在模仿stl库,但适用于嵌入式环境。(无动态分配)。
  2. 使用主开关语句,该语句将根据对象的int ID调用对象的
  3. 使用对基类的纯虚拟调用

我从来没有尝试过使用基本的CRTP模式,但是etl :: function应该是该模式所使用的机制的变体。我使用MSVC并在ARM Cortex M4上获得类似性能的时间是

  1. etl:4亿纳秒
  2. 开关:4.2亿纳秒
  3. 虚拟:2.9亿纳秒

纯虚拟呼叫明显更快。我是想念某些东西还是虚拟通话,不如人们所说的那么糟糕。这是用于测试的代码。

 class testetlFunc
{
public:
    uint32_t a;

    testetlFunc() { a = 0; };

    void foo();
};

class testetlFunc2
{
public:
    uint32_t a;

    testetlFunc2() { a = 0; };

    virtual void foo() = 0;
};

void testetlFunc::foo()
{
    a++; 
}


class testetlFuncDerived : public testetlFunc2
{
public:
    testetlFuncDerived(); 

    void foo() override;
};

testetlFuncDerived::testetlFuncDerived()
{ 
}

void testetlFuncDerived::foo()
{
    a++; 
}


etl::ifunction<void>* timer1_callback1; …
Run Code Online (Sandbox Code Playgroud)

c++ embedded virtual vtable

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

标签 统计

c++ ×2

c ×1

cmake ×1

embedded ×1

virtual ×1

vtable ×1