草庐IT

接受端

全部标签

c++ - 只接受指针类型参数的模板

在看到模板可以部分专用于引用或指针类型后,我想知道是否可以编写一个只接受指针类型的模板。这是我的尝试:templatestructMyTemplate{};intmain(){MyTemplatec;(void)c;return0;}这不会编译。应该如何修改?(即,如果我想要完成的事情是完全可能的) 最佳答案 您可以使用部分特化:templatestructMyTemplate;//DeclarationtemplatestructMyTemplate//Specialization{};或使用static_asserttempla

c++ - Uniform_real 不接受 numeric_limits::lowest()

我有一条线:std::uniform_real_distributiondistribution(std::numeric_limits::lowest(),std::numeric_limits::max());它编译但在调试时崩溃(VS2017CE)。我的猜测是,根据std::uniform_real_distribution的文档:Requiresthata≤bandb-a≤std::numeric_limits::max()当我的b是::max()和a是::lowest(),条件:b-a≤std::numeric_limits::max()未满足b-a基本上使max的值翻倍.有

c# - 如何调用接受来自 C# 的 stringstream 类型参数的 C++ DLL 函数?

我想导入一个非托管C++DLL并调用一个将stringstream作为参数的函数。在C#中,没有stringstream类,所以谁能告诉我如何从C#程序中调用这样的函数? 最佳答案 句号,您不应该通过DLL公开模板化对象。模板化对象(例如std::中的几乎所有内容)都被内联。所以通过这种方式,您的DLL获得了它自己的私有(private)实现拷贝。调用您的DLL的模块还将获得其自己的stringstream私有(private)实现。在它们之间传递意味着您无意中将两个不相关的实现编织在一起。对于许多项目,如果您使用完全相同的buil

java - 如何声明函数参数以接受抛出的函数?

我在Kotlin中定义了一个函数:funconvertExceptionToEmpty(requestFunc:()->List):Stream{try{returnrequestFunc().stream()}catch(th:Throwable){//Logtheexception...returnStream.empty()}}我已经用这个签名定义了一个Java方法:ListgetStaticWidgets()throwsIOException;我尝试这样组合它们:Streamwidgets=convertExceptionToEmpty(()->getStaticWidgets

java - 如何声明函数参数以接受抛出的函数?

我在Kotlin中定义了一个函数:funconvertExceptionToEmpty(requestFunc:()->List):Stream{try{returnrequestFunc().stream()}catch(th:Throwable){//Logtheexception...returnStream.empty()}}我已经用这个签名定义了一个Java方法:ListgetStaticWidgets()throwsIOException;我尝试这样组合它们:Streamwidgets=convertExceptionToEmpty(()->getStaticWidgets

c++ - 将 lambda 传递给接受模板类型函数的函数

我正在尝试创建一个模板函数,该函数将一个函数作为参数,并且参数函数具有供模板推导的参数。示例时间:这是一个接受固定函数类型并起作用的函数voidfunc_a(void(*func)(int)){func(1);}intmain(){autof=[](intx)->void{printf("%i\n",x);};func_a(f);return0;}这是我想做的,扩展第一个例子(这不会编译)templatevoidfunc_b(void(*func)(T...)){func(1);}intmain(){autof=[](intx)->void{printf("%i\n",x);};fun

c++ - 无论如何我可以让一个模板<typename T>接受多个值吗?

我写了这段代码,它目前可以接受一个void回调并向它传递一个值。但是,有什么办法可以让用户能够设置多个参数?也许像CallbackCaller这样的东西;而不是不定义多个类型名称的回调?我能以某种方式将所有这些都放入一个类型名称中吗?例如,这是我的类(class)templateclassCallback{private:std::vector>func;public:virtualvoidoperator+=(std::function_func){func.push_back(_func);}};我是这样使用的:CallbackTest;如果我只想将一个参数传递给我的函数,它工作得

c++ - 如何在编译期间计算数组大小(不接受指针)?

给定一个数组a,我希望countof(a)产生数组中元素的数量作为编译时常量。如果我有一个指针p,我希望countof(p)不编译。这看起来应该是(1)简单明了并且(2)通常包含在SO中,但是(1)我无法让它工作,并且(2)搜索SO没有发现任何东西。这是我的尝试。#include#includetemplate::value>::type>constexprstd::size_tcountof(T(&)[n]){returnn;}template::value>::type>voidcountof(T*)=delete;intmain(){inta[10];autoasize=coun

java - 为什么 pop() 应该接受一个参数?

快速背景我是一名Java开发人员,在空闲/无聊的时间里一直在玩弄C++。前言在C++中,您经常看到pop通过引用获取参数:voidpop(Item&removed);我知道用您删除的内容“填充”参数很好。这对我来说完全有意义。这样,要求删除顶部项目的人就可以查看删除的内容。但是,如果我要在Java中执行此操作,我会这样做:Itempop()throwsStackException;这样,在pop之后我们返回:作为结果的NULL,一个Item,或者一个异常将被抛出。我的C++教科书向我展示了上面的示例,但我看到大量不带参数的堆栈实现(例如stlstack)。问题如何在C++中实现pop函

c++ - 已与 boost asio 接受器一起使用的地址

我编写了一个服务器,用于监听传入的TCP连接和连接到它的客户端。当我关闭服务器并在同一端口上重新启动它时,我有时会在调用bind(...)时收到错误消息EADDRINUSE(错误代码:Linux上的98)。即使我设置了重用套接字的选项,也会发生这种情况。该错误并非一直发生,但似乎在客户端连接到服务器并在服务器关闭时发送数据时更常发生。我想问题是服务器关闭时仍然有挂起的连接(相关主题:https://stackoverflow.com/questions/41602/how-to-forcibly-close-a-socket-in-time-wait)。在服务器端,我使用的是boost