草庐IT

function-centered

全部标签

c++ - "control reaches end of non-void function"枚举类型完全处理大小写切换

为什么即使处理了type_t的所有可能值,此代码也会触发“控制到达非空函数的结尾”?处理此警告的最佳方法是什么?在切换后添加return-1?(代码测试here)typedefenum{A,B}type_t;intuseType(type_tx){switch(x){caseA:return0;caseB:return1;}}相关:Detectingifcastinganinttoanenumresultsintoanon-enumeratedvalue 最佳答案 一般来说,enum不是唯一的。例如,有人可以像useType((ty

c++ - std::is_function 不将模板参数识别为函数

我将函数指针传递给函数模板:intf(inta){returna+1;}templatevoiduse(Ff){static_assert(std::is_function::value,"Functionrequired");}intmain(){use(&f);//Plainfdoesnotworkeither.}但是is_function无法将模板参数F识别为函数,因此静态断言失败。编译器错误消息指出F是int(*)(int),它是指向函数的指针。为什么会这样?在这种情况下,我如何识别函数或指向函数的指针? 最佳答案 F是一个

c++ - c++ typedef std::function<> 如何使用?

你好,我正在做这个项目,在头文件中定义了以下内容typedefstd::functionHashFunction;我如何将它与我的HashFunction一起使用?当我尝试HashFunctionmyHashFunction;myHashFunction("mystring");程序崩溃。 最佳答案 std::function类型的对象行为非常像一个函数指针,指向一个带有签名Signature的函数.默认构造std::function只是还没有指向任何函数。std::function之间的主要区别和一个函数指针Signature*是

c++ - 删除自身内的 std::function 对象

这是明确定义的行为吗?#includevoidfoo(){autof=newstd::function;*f=[f](){deletef;};(*f)();f=nullptr;}intmain(){foo();}使用最新的g++,如果我在模板中执行此操作,则在valgrind下运行时会导致无效读取,否则它会正常工作。为什么?这是g++中的错误吗?#includetemplatevoidfoo(){autof=newstd::function;*f=[f](){deletef;};(*f)();f=nullptr;}intmain(){foo();} 最佳答案

c++ - 继承 : Function that returns self type?

假设我有两个类:classA{public:A*Hello(){returnthis;}}classB:publicclassA{public:B*World(){returnthis;}}假设我有一个B类的实例,如下所示:Btest;如果我调用test.World()->Hello()就可以了。但是test.Hello()->World()将无法工作,因为Hello()返回A类型。如何让Hello()返回B的类型?我不想使用virtual函数,因为我们有20多个不同的类继承A。 最佳答案 您可以使用CRTP,奇怪的重复模板模式:t

c# - 来自 C# : C++ function (in a DLL) returning false, 的 C++,但 C# 认为这是真的!

我正在编写一个C#小应用程序,它调用C++API中的几个函数。我将C++代码构建到DLL中,C#代码使用DllImport调用API。(我正在为C++DLL使用.DEF文件,所以我不需要extern"C"。)到目前为止,API只有一个函数,目前它什么都不做:boolFoo(){returnfalse;}在C#中,我有以下内容:publicclassFooAPI{[DllImport("Foo.dll")]publicstaticexternboolFoo();}...boolb=FooAPI.Foo();if(!b){//Throwanexception}我的问题是,出于某种原因,b的

c++ - std::bind 和 std::function 问题

intfunc(intx){returnx;}...std::functionx=std::bind(func,std::placeholders::_1);x(123);是否x(123)实际上调用operator()std::function的仿函数生成它又调用operator()std::bind的仿函数生成最终调用func?这是否被优化为与调用func(123)一样优化的东西??仿函数住在哪里std::bind产生?在什么范围内?std::bind如何命名?(会不会有名称冲突)lambdas能否替代std::bind的所有用法??是std::bind与将其实现为lambda一样最

windows - native 退出,代码为 : -1073741510 (0xc000013a) while using prime checker function

我一直在尝试创建我自己的素数检查器函数,虽然奇怪的是当我调用isPrime(7)时它返回1,这很好,但是当我调用isPrime(9)时它给我以下错误:“Mathematics.exe”:已加载“C:\DocumentsandSettings\mbryant\MyDocuments\VisualStudio2010\Projects\Mathematics\Debug\Mathematics.exe”,已加载符号。“Mathematics.exe”:已加载“C:\WINDOWS\system32\ntdll.dll”,无法找到或打开PDB文件“Mathematics.exe”:已加载“C

c++ - 指向任意函数的 "general function signature"指针

我会尝试更好地解释我想做什么。我读取了一个带有函数签名的文件,我想创建一个指向每个函数的指针。例如,一个看起来像这样的文件:something.dll;intf(char*x,inty,SOMESTRUCTz)something.dll;voidg(void)something.dll;SOMESTRUCTl(longlongw)现在,在运行时我希望能够创建指向这些函数的指针(通过加载something.dll并对这些函数使用GetProcAddress)。现在,GetProcAddress返回指向任意函数的FARPROC,但如何在运行时使用FARPROC调用这些函数?据我所知,我需要

c++ - 如何告诉 link.exe 使用 wmain 作为入口点。 LNK2019 : unresolved external symbol main referenced in function __tmainCRTStartup

我有一个通过visualstudio构建和链接的项目,但不是通过我们的构建系统。据我所知,如果定义了UNICODE,tchar.h包含一个将_tmain转换为wmain的宏。我检查了预处理器输出,确实_tmain已被wmain替换。包含wmain的文件随后编译得很好,但链接器提示main未定义。LNK2019:函数__tmainCRTStartup中引用的未解析外部符号mainwmain是否被我没有正确包含的另一组宏转换为main(由于缺少-D选项等),或者link.exe是否有一个指定入口点的特殊标志。谢谢。手动指定/entry:mainCRTStartup修复了它。编辑:我刚刚检查