草庐IT

可变性

全部标签

c++ - C 字符串数组初始化 - 这是可变的吗?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:ModifyingCstringconstants?Pointertoconstcharvschararrayvsstd::string我知道我可能在这个问题上打败了死马,但我有点困惑,我还没有设法在SO或谷歌上找到确切的答案(我有信心是正确的-只有关于C字符串的信息太多,无法筛选)。此外,我将其标记为C++,因为这是我感兴趣的内容,即使我们专门讨论C风格的字符串也是如此。在这种情况下:charconsta*="hello";charconstb[]="goodbye";我原以为“hello”和“goodby

c++ - 传递不同类型的可变数量的参数 - C++

我正在用C++编写代码,有几个关于省略号的问题:是否可以将类或类指针传入省略号?基本上我想做的是传入char*和class类型的可变数量的参数。我目前正在使用省略号并试图弄清楚如何在类里面通过。如果省略号在这里不适用,有哪些可用选项?我想让用户使用func(params1,params2,...)直接调用函数,而不是在传递vector或数组之前先明确地将参数分配给vector或数组作为函数的参数。 最佳答案 您应该考虑使用可变参数函数(C风格)是一个危险的缺陷。如果传递给函数的对象与等待的类型不匹配,或者如果您没有输入准确数量的等待

可变类型列表前缀的 c++ std::tuple

我试图从一些可变类型列表中提取类型前缀。这是我的尝试:#include#includetemplatestructpack{};templatestructprefix_tuple;templatestructprefix_tuple,Tnext,Ts...>{usingtype=typenameprefix_tuple,Ts...>::type;};templatestructprefix_tuple,Ts...>{usingtype=std::tuple;};templateusingprefix_tuple_t=typenameprefix_tuple,Args...>::typ

C++0x 可变参数包 : Syntax

以下代码片段在gcc4.6.1下无法编译:templatevoiddo_stuff(TS...ts){autof=[](TS...things){};}它会抛出一个错误,说明packthings没有展开。但是,以下代码确实可以编译:templatevoiddo_stuff(TS...ts){autof=[](TS...things...){};}注意参数列表中的内容之后的额外解包运算符。我从未见过在声明期间必须扩展可变参数包的情况。所以我想问你们好心人的问题是:这是合法的C++0x语法(编译的片段)还是GCC在处理可变类型时的一个怪癖? 最佳答案

c++ - Boost Spirit X3 无法编译具有可变因子的重复指令

我正在尝试使用具有可变重复因子的BoostSpiritX3指令repeat。基本思想是header+有效载荷,其中header指定有效载荷的大小。一个简单的例子“3123”被解释为header=3,data={1,2,3}(3个整数)。我只能从灵气文档中找到例子。它使用boostphoenix引用来包装变量因子:http://www.boost.org/doc/libs/1_50_0/libs/spirit/doc/html/spirit/qi/reference/directive/repeat.htmlstd::stringstr;intn;test_parser_attr("\x

C++ 将 std::function 对象传递给可变参数模板

我想将一个可调用对象(std::function对象)传递给一个类Foo.可调用对象引用另一个具有任意参数的类的成员方法,因此Foo必须是可变参数模板。考虑这段代码:structBar{voidMemberFunction(intx){}};templateclassFoo{public:Foo(std::functionf){}};intmain(){Foom1(&Bar::MemberFunction);return0;}这编译得很好。现在我想写一个工厂函数MakeFoo()返回unique_ptr到Foo对象:templatestd::unique_ptr>MakeFoo(std

c++ - g++ 可变参数模板问题

所以我把这个程序交给了g++和clang(都在Linux,x86_64上):#includeusingnamespacestd;templatestructA{staticconststrings;staticAa;~A(){coutconststringA::s={{Cs...}};templateAA::a;intmain(void){(void)A::a;return0;}Clang输出s=aaaaaaaaaaaaaaaa(正如预期的那样)。g++(版本5到8)输出s=s=aaaaaaaa(非常出乎意料)。如果您不使用可变参数模板(如果您删除所有代码并内联字符列表以初始化A::s

c++ - 可变大小位集

这个问题在这里已经有了答案:Definebitsetsizeatinitialization?(7个答案)关闭5年前。我正在练习一个关于数组的问题,我必须在其中找到独特的元素。现在为此,我的逻辑是找到数组中的最大元素并为其定义位集。但问题是bitset需要一个常数值,所以如何克服这个问题,下面是我的一些问题:a)我可以随便定义一个可变大小的位集吗?b)如果不是,那么使用vector的最佳方法是什么?或vector?c)我知道boost有一个动态位集,但是当我这样做是为了学习时,我想知道其他方法。

c++ - 是否有具有多访问方法的可变参数模板变体?

我在boost::variant中达到了50种类型的限制.我找到了thisniceself-containedheader但它缺少多次访问功能(我实际上需要双重访问)。我试着看一下它,但这种方法似乎非常雄心勃勃,并且与我缺乏元编程经验相冲突......如果您能指出一个预煮的变体实现或提供一些建议来扩展上面我喜欢的那个,那就太好了,谢谢!致FilipRoséen和投票者:here您会找到我正在考虑的设计的基本示例。请随时添加更多关于此的深入评论。 最佳答案 编辑:Boost现在支持multi-visitation,C++17varia

c++ - 可变参数模板类参数容器实例化

我想实例化一个可变模板类Store有一个std::vector对于TArgs...中的每种类型打包。templateclassStore{//obviouslynotvalidcode//assumingeachtypeofTArgs...hasa`unsignedint`idthatcanbe//retrievedwithgetId()std::array>bags;templatevoidadd(TmValue){bags[getId()].push_back(mValue);}templatestd::vector&get(){returnbags[getId()];}};假设我