草庐IT

c++ - enable_if : minimal example for void member function with no arguments

我试图更好地理解C++11中的std::enable_if并且一直在尝试编写一个最小的示例:一个类A带有成员函数voidfoo()根据类模板中的类型T具有不同的实现。下面的代码给出了期望的结果,但我还没有完全理解它。为什么版本V2有效,但V1无效?为什么需要“冗余”类型U?#include#includetemplateclassA{public:A(Tx):a_(x){}//EnablethisfunctionifT==int/*V1*///template::value,int>::type=0>/*V2*/template::value,int>::type=0>voidfoo(

c++ - 找不到 boost_process cmake find_package

我正在尝试将boost库导入我的C++项目,但出于某种原因它找不到Boost.Process,尽管它找到了其他库。我的CMakeLists.txt文件:cmake_minimum_required(VERSION3.9FATAL_ERROR)set(PROJECT_NAME"test-stuff"CXX)project(${PROJECT_NAME})set(Boost_USE_MULTITHREADEDON)find_package(Boost1.64.0REQUIREDsystemfilesystemprocess)if(Boost_FOUND)include_directorie

c++ - if 子句中的自动赋值

我有下面的代码,它报告“这里不允许自动”//GeSettings()returnsboost::optionalandcouldbeemptyif((autoret=GetSettings(InputField))&&ShouldWeDoThis()){dosomethingwithret;}但如果没问题,可以如下更改。if(autoret=GetSettings(InputField)){if(ShouldWeDoThis()){dosomethingwithret;}}背后的原因可能是傻买请问为什么?我正在使用VisualStudio2017 最佳答案

如何使用strspn模仿std :: string的find_first_not_of

我正在尝试创建类似于std::String的自定义字符串类。而且我在实现“find_first_not_of”时遇到了麻烦。这是我的测试代码#includeclassString{private:char*m_data;intm_length;char*alloc(intsize);intlength()const{returnm_length;}intsize()const{returnm_length;}constchar*c_str()const{returnm_data;}public:String(constchar*str=0);intfind_first_not_of(const

c++ - 在循环/if 括号后检测分号

GCC中是否有任何标志(如clang中的-Wempty-body),可以帮助我检测while/for循环大括号后的分号?有时人类很难发现这些简单的错误。inti=0;for(i=0;i我使用GCC4.7.3和clang3.2-1~exp9ubuntu1。编辑:我还检查编译器是否可以帮助我在“if-else语句”之后找到这些错误。if(i==0){cout有趣的是gcc通过打印警告比clang更有帮助(带有此标志(-Wall-pedantic-Wempty-body):main.cpp:30:9:warning:suggestbracesaroundemptybodyinan‘else’

java - C++/ java : Efficiently find a set in the collection containing given value

假设我们有一组互斥集合{A,B,C,D}其中A={1,2,3},B={4,5,6},C={7,8,9},D={10,11,12}给定一个值Z,例如3,我希望它返回集合A的索引,因为A的成员是3。问题是我如何使用C++或JAVA高效地完成它。我当前的解决方案:将A、B、C、D作为HashSet(或C++中的unordered_set)存储在容器中并循环遍历每个集合,直到包含Z找到了。问题在于容器中存储的集合数量的复杂度为O(n)。有什么方法(或任何数据结构来存储这些集合)比O(n)更快地做到这一点吗? 最佳答案 您可以创建一个将值映射

c++ - SFINAE : Detecting if a function is called by a compile time known value

我喜欢在我的一个ctors以编译时已知值被调用时做一些检查。有办法检测吗?所以当有人调用它时:Aa(10);因为10是编译时已知常量,所以我喜欢调用一个特殊的构造函数,如下所示:template>A(intValue){}知道如何解决这个问题吗?谢谢! 最佳答案 积分常量可以解决您的问题:structA{template*=nullptr>A(std::integral_constant){}};然后,你可以像这样使用它:Aa{std:integral_constant{}};为了便于使用,您还可以使用类似于boost::hana的

c++ - std::forward_list::remove_if 谓词的要求

考虑这段代码:structT{boolstatus;UsefulDatadata;};std::forward_listlst;lst.remove_if([](T&x)->bool{returnx.status=!x.status;});即一次性切换状态和删除非事件元素。根据cppreference上面的代码似乎是未定义的行为(强调我的):templatevoidremove_if(UnaryPredicatep);p-unarypredicatewhichreturnstrueiftheelementshouldberemoved.Thesignatureofthepredicat

c++ - MSVC 无法评估 enable_if 中的 constexpr 函数

考虑一个简单的效用函数来计算合取,并使用这个效用来确保std::tuple中的类型都相等。#include#includeconstexprautoall()noexcept->bool{returntrue;}templateconstexprautoall(boolconstx,Bools...xs)noexcept->bool{returnx&&all(xs...);}templatestructfoo;templatestructfoo,std::enable_if_t::value...)>>{};intmain(){foo>x;}GCC和Clang可以处理这段代码,但MSV

c++ - boost::enable_if_c 似乎不起作用

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Howtouseenable_iftoenablememberfunctionsbasedontemplateparameterofclass我有一个类模板:templateclassVector我想为特定的N启用构造函数,所以我这样做:Vector(typenameboost::enable_if_c::typeconst&e0,Tconst&e1){data[0]=e0;data[1]=e1;}但是编译器(MSVC2010SP1)给我一个错误,而不是应用SFINAE。错误是:errorC2039:'typ