小编Ant*_*Ant的帖子

整个类作用域中的C++名称空间别名

我希望能够在类声明中使用命名空间别名,但是会出现编译器语法错误.

struct MyClass
{
    namespace abc = a_big_namespace;
    void fn() {
        abc::test();
    }
};
Run Code Online (Sandbox Code Playgroud)

我可以让它工作的唯一方法是将别名放在每个函数中.

void fn() {
    namespace abc = a_big_namespace;
    abc::test();
}
Run Code Online (Sandbox Code Playgroud)

另外,我希望能够使用函数参数的别名.我没有找到解决办法.

void fn(abc::testType tt) {
    abc::test(tt);
}
Run Code Online (Sandbox Code Playgroud)

有办法做我想要的吗?

编辑:我的解决方案

我发现我的特定问题并不需要未命名的命名空间,只需这样做:

namespace myspace
{
    namespace abc = a_big_namespace;

    struct MyClass
    {
       void fn(abc::testType tt) {
          abc::test(tt);
       }
    };
}
Run Code Online (Sandbox Code Playgroud)

要切换到另一个库,这是我的别名命名空间引用的,我只需更改别名.这种方法甚至允许我在一个文件中有两次相同的类,每次都引用一个不同的库.感谢你的帮助.

c++ alias scope namespaces

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

如何使用Boost Filesystem复制目录

如何使用Boost Filesystem复制目录?我尝试过boost :: filesystem :: copy_directory(),但只创建目标目录而不复制内容.

c++ filesystems directory boost copy

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

使用命名空间仅用于初始化列表

我在初始化列表中有很多命名空间用法,并且希望使用using命名空间来减少详细程度.但是,初始化列表超出了构造函数括号的范围,因此我必须将使用放在构造函数外部并使用它污染文件的其余部分.有没有办法根据需要调整使用范围?而不是:

MyClass::MyClass() :
    m_one(nsConstants::ONE),
    m_two(nsConstants::TWO),
    m_three(nsConstants::THREE)
{}
Run Code Online (Sandbox Code Playgroud)

我想要:

MyClass::MyClass() :
    using namespace nsConstants;
    m_one(ONE),
    m_two(TWO),
    m_three(THREE)
{}
Run Code Online (Sandbox Code Playgroud)

_

c++ namespaces using list

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

remove_if with boost :: bind很慢

我有一个std ::类列表,并希望删除标记为删除的条目.我正在使用std :: remove_if和erase.

class MyClass
{
    bool isDone(MyData& myData)
    {
        return myData.isDone();
    }

    void removeIfDone(std::list<MyData>& myList)
    {
        std::list<MyData>::iterator it =
            remove_if(myList.begin(), myList.end(), 
                  boost::bind(&MyClass::isDone, this, _1));
        myList.erase(it, myList.end());
    }
};
Run Code Online (Sandbox Code Playgroud)

我正在一个小型处理器上运行,内存分配和释放非常昂贵.此删除在我的应用程序中调用new并删除数千次.

我以前在使用boost::ref非平凡变量作为绑定参数时使用过,但在这种情况下,我认为它可能是仿函数本身的创建和破坏,或者是造成问题的复制.

我想做点什么

boost::bind(&MyClass::isDone, boost::ref(this), boost::ref(_1));
Run Code Online (Sandbox Code Playgroud)

我找不到有关正在创建和销毁的内容的文档.所以我的简单问题是如何提高效率呢?

c++ boost boost-bind ref remove-if

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

无法关闭TCP_NODELAY

我正在使用Boost asio发送TCP消息.我设置了NO_DELAY选项,因为这是一个"实时"控制系统.我看到使用Wireshark在消息中设置了PSH标志.我对性能表示满意,并且按预期工作.

为了兴趣,我决定关闭NO_DELAY并测量性能差异.

我交换了现有的代码:

m_tcpSocket.open(boost::asio::ip::tcp::v4());
boost::asio::ip::tcp::no_delay noDelayOption(true);
m_tcpSocket.set_option(noDelayOption);

// snip create endpoint
m_tcpSocket.connect(m_tcpServerEndpoint);

// snip build message
m_tcpSocket.send(boost::asio::buffer(pDataBuffer, size));
Run Code Online (Sandbox Code Playgroud)

对于

boost::asio::ip::tcp::no_delay noDelayOption(false);
m_tcpSocket.set_option(noDelayOption);
Run Code Online (Sandbox Code Playgroud)

我仍然看到PSH标志设置.

我也尝试删除set_option代码并仍然看到它设置.

在Wireshark中我看到:

104 - 105  SYN
105 - 104  SYN, ACK
104 - 105  ACK
104 - 105  PSH, ACK + my message
105 - 104  ACK
Run Code Online (Sandbox Code Playgroud)

其中104和105是我的2台PC的IP地址.我对使用我的数据的消息有ACK感到惊讶.

如何关闭NO_DELAY?

delay boost-asio nagle

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

如何获得可靠的Cortex M4短延迟

我正在将一些代码从M3移植到使用3个NOP的M4,以在串行输出时钟更改之间提供非常短的延迟。M3指令集将NOP的时间定义为1个周期。我注意到M4中的NOP不一定会延迟任何时间。我知道我将需要禁用编译器优化,但是我正在寻找一个低级命令,该命令将给我可靠,可重复的时间。实际上,在这种特殊情况下,串行经常被使用,并且速度可能很慢,但是我仍然想知道获得周期级延迟的最佳方法。

assembly cortex-m3 delay nop

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