草庐IT

T_OLD_FUNCTION

全部标签

c++ - 我可以在编译时检测到 "function arguments"是编译时常量吗

我可以在编译时检测“函数参数”1是否是编译时常量吗?例如,函数print(inti)如果调用print(5)可以打印"constant5"但是"non-constant5"如果作为print(i)调用,其中i是一些非常量变量。特别是,在“isconstant”分支中,我应该能够将i视为constexpr,包括将其用于模板参数等。宏技巧、模板元编程和SFINAE技巧都可以。理想情况下它是可移植的,但特定于编译器的解决方案总比没有好。如果存在“假阴性”也没关系-即,如果常量值有时被检测为非常量(例如,当某些优化被禁用时)。如果解决方案可以检测到常量值何时被间接传递给函数(例如,当常量值被传

c++ - Clang 与 MSVC : Treatment of template function prototypes

下面是一段测试代码,我分别用MSVC和Clang来对比编译结果。每个编译器的输出如下所示。MSVC假装未使用的模板声明甚至不存在。Clang产生错误。问题是,哪个编译器在这里最符合标准?我见过依赖MSVC行为的遗留生产代码,但我不确定它是否可以继续依赖。classS{structP{};};templateS::PBat(T);在MSVC10中干净地编译:E:\clangbuild\bin\Release>cl/c/nologotest.cpptest.cpp在Clang中产生错误:E:\clangbuild\bin\Release>clang++test.cpptest.cpp:9:

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