草庐IT

can_handle

全部标签

c++ - 带有容器和默认分配器的模板模板参数 : can I make my declaration more compact?

我在看这个有趣的话题:https://stackoverflow.com/a/16596463/2436175我的具体案例涉及使用来自opencv的cv::Point_和cv::Rect_的标准容器声明模板函数。我想针对以下模板:我将使用的标准容器类型完成cv::Point_和cv::Rect_定义的基本数据类型我最终做出了以下声明:templateclassContainer_t>voidCreateRects(constContainer_t,std::allocator>>&points,constTvalue,Container_t,std::allocator>>&rects

C++ WinAPI : handling long file paths/names

我正在考虑在我的Windows应用程序中处理更长的文件路径。目前,我有一个文本框(编辑框),用户可以在其中键入绝对文件路径。然后,我使用GetWindowText将键入的文件路径读入声明如下的字符串:TCHARFilePath[MAX_PATH];显然,这里我依赖于MAX_PATH常量,它将我限制为260个字符。因此,为了处理更长的文件/路径名称,我可以像这样扩展我的TCHAR数组:TCHARFilePath[32767];。或者有更好的方法吗?我可以使用可变长度数组吗?(TCHARFilePath[];这在C++中是否可行?-抱歉,我对此很陌生)。先谢谢你!这是我上面提到的整个代码片

序列化异常 : can't locate argument-less serializer

我正在创建一个Kotlin多平台库;实际上我有3个模块(common、jvm和js),在我得到的类路径中:classpath"org.jetbrains.kotlin:kotlin-serialization:${versions.kotlin}"在我的模块中我得到了:common:"org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:${versions.kotlinSerialization}"jdk:"org.jetbrains.kotlinx:kotlinx-serialization-runtime:${ver

序列化异常 : can't locate argument-less serializer

我正在创建一个Kotlin多平台库;实际上我有3个模块(common、jvm和js),在我得到的类路径中:classpath"org.jetbrains.kotlin:kotlin-serialization:${versions.kotlin}"在我的模块中我得到了:common:"org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:${versions.kotlinSerialization}"jdk:"org.jetbrains.kotlinx:kotlinx-serialization-runtime:${ver

c++ - [C++ 编译时断言] : Can we throw a compilation error if some condition is not met?

我写了一个函数:templatevoidtryHarder(){for(inti=0;i但我只希望它在N介于0和10之间时编译。我可以这样做吗?怎么办? 最佳答案 您可以使用static_assertdeclaration来完成:templatevoidtryHarder(){static_assert(N>=0&&N此功能仅在C++11之后可用。如果您坚持使用C++03,请查看Boost'sstaticassertmacro.整个想法都是很好的错误信息。如果您不关心这些,或者甚至负担不起boost,您可以执行以下操作:templa

C++ : Can the compiler optimize this code segment?

voidfoo(constintconstant){for(inti=0;i外循环的每次执行都会检查“constant”的值。然而,常量永远不会改变,所以大量的CPU时间被浪费在测试条件常量我个人认为这个问题是不可避免的。即使编译器将比较放在外循环之前并设置某种bool变量“skip_inner_stuff”,仍然必须在外循环的每次传递中检查该变量。您对此事有何看法?是否有更有效的方法来编写上述代码段来避免该问题? 最佳答案 您描述的优化也称为loopunswitching.多年来,它一直是优化编译器的标准部分-但如果您想确保编译器

c++ - 是: "std::string can hold '\0' character" by design?

std::string实际上可以容纳'\0'字符这一事实一直都在出现。这当然与C风格的字符串不一致。所以我想知道,这是设计使然,还是遗漏,或者仅仅是标准不禁止它而编译器允许这种情况发生的事实? 最佳答案 我想知道你的争吵是什么。'\0'只是另一个字符。没有有效的方法可以在通用“char”字符串中禁止它。不幸的是,同一字符在C语言中具有特殊含义,但必须处理遗留代码在与它进行互操作时施加的每个限制。只要您坚持使用专门使用std::string的代码,这应该不是问题。为了解决您的意见,我们需要查看采用char*的构造函数,它将是basic

c++ - Visual Studio : how to handle project dependencies right?

我正在编写一个程序(用C++),它需要多个VS项目,我想将它们放入同一个VS解决方案中。我正在使用VisualStudio2010。这里只是想要的架构:我正在为我的项目使用第3方库(A),我有所有的头文件和.lib文件,我用源代码编译。有了这个库,我正在编写自己的类和函数。那是我的项目(B)。然后我想为用户开发两个界面:命令行界面(C1)和GUI界面(C2),它们使用(B)中定义的类和函数。A我是VisualStudio的新手,我不知道如何正确处理这些依赖项。我应该使用项目依赖项(在解决方案属性中)还是引用(在项目属性中)?事实上,我不确定依赖项和引用到底在做什么。我应该将B编译成某个

c++ - decltype(自动),尾随返回类型和 sfinae : can we mix them?

考虑以下代码:autof()->decltype(auto){/*dowhateveryouwanthere*/}intmain(){f();}推导出返回类型,decltype(auto)用作尾随返回类型。下面的代码是一个稍微修改过的(实际上,sfinae'd)版本:structS{staticvoidf(){}};structT{};templateautof(int)->decltype(U::f(),void()){//dowhateveryouwanthere}templateautof(char)->decltype(auto){//dowhateveryouwanthere

c++ - libc++ 与 VC++ : Can non-UTF conversions be done with wstring_convert?

C++11的std::wstring_convert效果很好*用于标准UTF-8UTF-16/UCS2/UCS4转换。但是,当我尝试使用不是来自的构面实例化wstring_convert或wbuffer_convert时,它没有按预期工作://worksasexpectedstd::wstring_convert>ucs4conv;//Now,byanalogy,Iwanttotrythis:std::wstring_convert>gbconv(newstd::codecvt_byname("zh_CN.gb18030"));Clang++错误提示“在~wstring_convert