草庐IT

C++ 默认枚举值用法

这个讨论是关于默认值的名称:C#:ShouldthedefaultvalueofanenumbeNoneorUnknown?但是,最近与我交谈过的很多人都认为默认枚举值有害、不必要并且可能导致不良做法。例如考虑以下内容:enumeJobStates{JOB_STATE_INITIALISING,JOB_STATE_PROCESSING,JOB_STATE_DONE};将作业写成JOB_STATE_UNKNOWN是没有意义的,但您可以想象任何可用于监视所述作业的结构都可以使用这样的值。在定义枚举时是否有关于创建默认值的最佳实践/经验法则?是否应尽可能避免使用它们?

c++ - 使用 MPL 列表扩展 boost 变体

我正在尝试为程序提供一种向库中的变体添加新对象的方法,但我遇到了一些神秘的错误。#include#include#include#includestructInternalType1{};structInternalType2{};templatestructFoo{typedefboost::mpl::listTypes;typenameboost::make_variant_over::type>::typecontainer_;//typenameboost::make_variant_over//>::type//>::typecontainer_;};structLocalT

基于python中的某些单词基于替代字典生成变体字符串

给定一个字符串和单词替换字典,我试图让Python返回所有变体字符串。例如。对于字符串,“一个人去市场”,而替换{'一个':['一个','两个','三'],'market':['''','town','bed']}我想返回:['一个人去镇上',“两个去镇上”,“三个去镇上”,一个去镇上,一个上床睡觉,“两个上床睡觉”,“三个上床睡觉”]。目前,我只有在有两个替换选项时才能使用此功能。我的部分工作方法使用字典生成的单词列表,例如在上面的示例中,我有[一个,两个,三,“'','to','','',beed']。这个:defperm(wordlist):a=[[]]foriinwordlist:if

c++ - 如何使用 -std=c++17(可选、任意、string_view、变体)在 g++ 6.2.0 中包含 C++ 17 header

std::optional在C++17中,它是std::experimental::optional之前。我尝试编译一个包含的文件,使用命令:g++-std=c++17.cpp(在Bash终端中)。我收到以下错误:.cpp:5:20fatalerror:optional:Nosuchfileordirectory#include^compilationterminated但我可以#include就好了。我是否缺少一些头文件?如何包含optional标题?我也不能包含,或,得到同样的错误。 最佳答案 你不能。GCC6.2'ssuppo

c++ - 在 1_54 中破坏了 boost 变体?

我认为Boost::variant在1_54中被破坏了。我正在尝试将std::unique_ptr用作boost变体中的有界类型。根据1_54文档,变体需要可复制构造或可移动构造。http://www.boost.org/doc/libs/1_54_0/doc/html/variant/reference.html所以我在我的代码中实现了移动构造函数并禁用了复制构造函数。当我尝试将某些内容分配给变体对象时,它无法编译。我尝试了各种不同的方法,包括使用std::move将数据分配给变体对象,但似乎没有任何效果。根据编译错误堆栈跟踪,我确定问题出在variant.hpp中,它试图备份rhs

c++ - 变体与继承

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion假设我正在为某种编程语言编写编译器。通常使用抽象语法树(AST)作为内部表示。我可以看到两种可能的设计方式:使用boost::variant使用继承由于节点的层次结构是固定的-boost::variant就足够了。我的问题是,从可维护性和运行时效率的角度来看,每种方法的优缺点是什么?

c++ - 如何通过重复字符串生成所有变体?

我想用C++中的字符串重复生成所有变体,我非常喜欢非递归算法。过去我想出了一个递归算法,但由于复杂性(r^n),我希望看到一种迭代方法。令我感到非常惊讶的是,我无法在网络或StackOverflow上的任何地方找到解决此问题的方法。我想出了一个Python脚本,它也可以执行我想要的操作:importitertoolsvariations=itertools.product('ab',repeat=4)forvariationsinvariations:variation_string=""forletterinvariations:variation_string+=letterpri

c++ - Boost变体失败

我有这样的代码:boost::variantprmJointDef;b2DistanceJointDef&prmDistaceJointDef=boost::get(prmJointDef);错误是:source\Scene\Components\JointComponent.cpp:51:96:error:nomatchingfunctionforcallto'get(boost::variant&)'\source\Scene\Components\JointComponent.cpp:51:96:note:candidatesare:boost/optional/optional

C++ 相互递归变体类型(再次)

我遇到的问题类似于此处描述的问题:C++MutuallyRecursiveVariantType我正在尝试用C++创建一个JSON表示。许多库已经提供了非常快的优秀JSON表示和解析器,但我并没有重新发明这个轮子。我需要创建一个支持特定条件下某些空间优化的C++JSON表示。简而言之,当且仅当JSON数组包含同质数据时,而不是将每个元素存储为臃肿的变体类型,我需要原生类型的紧凑存储。我还需要支持异构数组和标准嵌套JSON对象。以下是代码的“如果愿望是马,乞丐会骑”的版本,旨在清楚地说明意图,但显然是错误的,因为在任何声明存在之前就使用了类型。我想避免在类型中多次指定相同的信息(即数组、

c++ - 如何检查模板类型是否是变体类型的类型之一?

考虑变体类型和模板函数,如何检查模板类型是变体类型之一?有没有比下面的方法更优雅的方法?typedefboost::variantVar;templatevoidf(constT&x){BOOST_STATIC_ASSERT(boost::is_same::value||boost::is_same::value);}注意:我使用Boost1.57和gcc4.8.3。我不使用C++11是为了与旧的gcc版本兼容。 最佳答案 使用MPL:#include#includetypedefboost::variantVar;template