小编Jai*_*ime的帖子

可以在linux中发送的AF_UNIX数据报消息的最大大小是多少?

目前我的硬限制为130688字节.如果我尝试在一条消息中发送更大的内容,我会收到ENOBUFS错误.

我检查了net.core.rmem_default,net.core.wmem_default,net.core.rmem_max,net.core.wmem_max和net.unix.max_dgram_qlen sysctl选项并将它们全部增加但是它们没有效果,因为它们处理了总缓冲区大小不是邮件大小.

我还设置了SO_SNDBUF和SO_RCVBUF套接字选项,但这与上面的问题相同.无论如何,默认套接字缓冲区大小都是根据_default套接字选项设置的.

我已经查看了在套接字堆栈中返回ENOBUFS的内核源代码,但我不清楚它来自何处.似乎只返回此错误的地方与无法分配内存有关.

最大尺寸实际上是130688吗?如果不能在没有重新编译内核的情况下进行更改?

谢谢!

unix sockets dns datagram

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

C++模板类专业化:为什么需要重新实现常用方法

在样本中:

#include <iostream>

using namespace std;

class B
{
public:
    virtual void pvf() = 0;
};

template <class T>
class D : public B
{
public:
    D(){}

    virtual void pvf() {}

private:
    string data;
};

template <>
class D<bool> : public B
{
public:
    D();

    virtual void pvf(){ cout << "bool type" << endl; }
};

int main()
{
    D<int> d1;
    D<bool> d2;
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

test.cpp:(.text+0x1c): undefined reference to `D<bool>::D()'
Run Code Online (Sandbox Code Playgroud)

请注意,我不仅仅专门研究D()的原因是我想D<T>::data在这种D<bool>情况下消除字符串的需要.

为什么我需要重新实现D()D<bool>?好像应该有一种方法让我告诉编译器使用该版本 …

c++ templates specialization

14
推荐指数
3
解决办法
9454
查看次数

如何在图书馆内为我的班级的朋友制作主?

请看我第一次尝试回答这个问题 .为了简化事情,我忽略了讲述整个故事.结果我的例子工作!抱歉.

整个故事是,这是一个库,在一个文件中包含一个类,另一个文件中包含一个主,所有这些都链接到我的库中.该库提供了流程框架的基础,这就是为什么主要是在库中而不是流程.

下面是我所拥有的精简版.

pf.hpp

using namespace std;

namespace MyNamespace
{
  class ProcessManager
  {
  public:
    friend int main(int argc, char** argv);
  private:
    void test();
  };
};
Run Code Online (Sandbox Code Playgroud)

pf.cpp

#include "pf.h"

namespace MyNamespace
{
  ProcessManager::test()
  {
    cout << "My friend has accessed my member" << endl;
  }
};
Run Code Online (Sandbox Code Playgroud)

pfmain.cpp

#include "pf.hpp"

int main(int argc, char** argv)
{
   ProcessManager pm;

   pm.test();
}
Run Code Online (Sandbox Code Playgroud)

请注意,这在编译库时失败

我试过的是:

  • 将朋友移到各处
  • 让朋友引用主要使用全局范围(例如:: main)
  • 使朋友和主要声明使用全局范围

我错过了什么?

谢谢!

c++ program-entry-point friend

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

无论如何在C++ 11中是否在模板中获取成员指针类型?

我知道这在C++ 03中是不可能的,但我希望有一些新的巫术允许我这样做.见下文:

template <class T>
struct Binder
{
    template<typename FT, FT T::*PtrTomember>
    void AddMatch();
};
struct TestType
{
    int i;
};
int main(int argc, char** argv)
{
    Binder<TestType> b;
    b.AddMatch<int,&TestType::i>(); //I have to do this now
    b.AddMatch<&TestType::i>(); //I'd like to be able to do this (i.e. infer field type)
}
Run Code Online (Sandbox Code Playgroud)

在C++ 11中有没有办法做到这一点?decltype会有帮助吗?

**更新:使用Vlad的例子我认为这样的事情会起作用(警告:我没有编译,因为我正在构建具有decltype支持的编译器)

template <class T>
struct Binder
{
    template<typename MP, FT ft = decltype(MP)>
    void AddMatch()
    {
        //static_assert to make sure MP is a member pointer of T
    } …
Run Code Online (Sandbox Code Playgroud)

c++ templates decltype member-pointers c++11

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

如何在绑定到EntityCollection时获取Windows窗体DataGridView以显示新记录

尝试在运行时向EntityCollection添加新记录,并使用新信息更新DataGridView.

我已经尝试将datagridview直接绑定到实体集合(即ObjectSet),并通过绑定到同一集合的BindingSource.

我已经尝试了DataGridView.Refresh(),DataGridView.EndEdit()和BindSource.ResetBindings()等,但似乎没有任何效果.

.net datagridview winforms entitycollection

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

我如何让主要成为我班级的朋友?

我认为这是可能的,但编译器抱怨它无法访问我班级的受保护/私人成员.我试过移动东西并更改签名,但找不到有效的组合.

我基本上有:

class MyClass
{
public:
    friend int main(int argc, char** argv);

private:
    void test()
    {
        cout << "My friend has accessed my member" << endl;
    }
};

int main(int argc, char** argv)
{
    MyClass mc;
    mc.test();
}
Run Code Online (Sandbox Code Playgroud)

c++ program-entry-point friend

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

如何在 Windows 上将 clang 静态分析器与 msbuild 结合使用?

clang 的二进制 Windows 安装程序包含 scan-build,但是当您使用 msbuild 运行它时,什么也没有发生。即使我做了类似的事情:

"C:\Program Files\LLVM\bin\scan-build.bat" "C:\Program Files\LLVM\bin\clang.exe" test.cpp
Run Code Online (Sandbox Code Playgroud)

我得到类似的东西:

scan-build: Using 'C:\Program Files\LLVM\bin\clang.exe' for static analysis
scan-build: Removed Directory '....'
scan-build: No Bugs found
Run Code Online (Sandbox Code Playgroud)

其中test.cpp是:

void DivideByZero(int z){
    if (z == 0) {
        int x = 1 / z;
    }
}

int main() {
    int *i = nullptr;
    *i = 42;
    DivideByZero(0);       
}
Run Code Online (Sandbox Code Playgroud)

如果我使用以下内容,我会收到一些警告:

"C:\Program Files\LLVM\bin\clang.exe" --analyze test.cpp
Run Code Online (Sandbox Code Playgroud)

回到我的问题。如何让它与 MSBUild 一起工作?scan-build 实际上在做什么,我应该使用它还是 --analyze?有什么不同?

windows msbuild static-analysis clang clang-static-analyzer

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

在ASP.NET之外使用Razor

现在MVC 3似乎正式发布,我们是否知道是否有官方支持在ASP.NET管道之外使用Razor.

我知道有一些关于如何做到这一点的帖子,但似乎没有一个官方,所有都有点不同.

如果还没有正式的方法可以帮助我找到最好的现有解决方案吗?

谢谢!

razor asp.net-mvc-3

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

如何使用静态断言和类型特征阻止嵌套模板类型中的菱形图案?

可能重复:
有没有办法阻止使用静态断言和类型特征从两次派生类?

我想要防止的是不止一个基于C的模板来自D(即应该只有一个C派生的实例).希望C或B中的静态断言可以解决这个问题.

// My Classes
template <class T>
class A {};

class B {};

template <class T, class S>
class C : public B, public virtual A<T> {};

// Someone elses code using my classes
class D : public C<Type1, Type2>, public C<Type3, Type4>
{
};
Run Code Online (Sandbox Code Playgroud)

c++ templates static-assert type-traits

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

可以在SRC_URI中为BB配方定义多个下载位置吗?

我想要做的是在SRC_URI中定义文件(http://)或repo(git://)的辅助位置,如果第一个发生故障的话.

就像是:

SRC_URI = "http://site1/mytar.tar.gz \
           http://site2/mytar.tar.gz \
Run Code Online (Sandbox Code Playgroud)

要么

SRC_URI = "git://site1/myrepo.git \
           git://site2/myrepo.git
Run Code Online (Sandbox Code Playgroud)

如果第一个选项失败,它将尝试第二个选项而不是仅将它们相互下载.

我知道有预镜像,本地缓存和镜像,但我真的只想在BB配方中指定多个位置.

这似乎应该得到支持,但我找不到它.

openembedded bitbake yocto

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