草庐IT

auth-user-pass

全部标签

c++ - 为什么 Foo::inner Constexpr 不会链接,而 User Literal{Foo::inner Constexpr} 会链接?

考虑以下简单类,这些类是我根据在实际项目中遇到的问题设计的。Triple是一种与内部一起使用的快速样板类型constexprFoo类中的s:#includeclassTriple{public:friendstd::ostream&operator如果我再写一个main()使用公共(public)内部函数constexpr来自Foo,如下,会链接失败(使用g++4.7.0,在Windows7上通过mingw-x86-64):intmain(intargc,char**argv){usingstd::cout;usingstd::endl;cout$g++-otest-O3--std=c

c++ - 标准库predefined 'user-defined' literal "m"是在哪里定义的?

我在浏览C++CoreGuidlines时偶然发现了以下示例文档:Examplechange_speed(doubles);//bad:whatdoesssignify?//...change_speed(2.3);Abetterapproachistobeexplicitaboutthemeaningofthedouble(newspeedordeltaonoldspeed?)andtheunitused:change_speed(Speeds);//better:themeaningofsisspecified//...change_speed(2.3);//error:nouni

c++ - 哪个更好 : returning tuple or passing arguments to function as references?

我创建的代码中有两个函数returnValues和returnValuesVoid。一个返回2个值的元组,另一个接受参数对函数的引用。#include#includestd::tuplereturnValues(constinta,constintb){returnstd::tuple(a,b);}voidreturnValuesVoid(int&a,int&b){a+=100;b+=100;}intmain(){auto[x,y]=returnValues(10,20);std::cout我读到了http://en.cppreference.com/w/cpp/language/st

C++ : syntax for passing iterator to a function?

我正在制作一个类,它是一种容器,我想制作一个可以采用“第一个”和“最后一个”迭代器的构造函数,如std::vector和其他标准容器。正确的语法是什么?(我想要一个模板函数,它可以接受任何可用的第一个/最后一个迭代器类型(就像我认为的标准库)。非常感谢!举个例子,我想要这样的东西:templateMyClass(...first,...last)但是……是什么?非常感谢。关于第一个答案:我想要一个将迭代器作为参数的特定构造函数(因为我已经有了将值和指针作为参数的构造函数)编辑:这样可以吗?templateMyClass(std::iteratorfirst,std::iteratorl

c++ - 最烦人的解析 : why doesn't `g( ( f() ) );` call `f` 's default constructor and pass the result to `g` 's ctor that takes a `f` ?

这不是Mostvexingparse:whydoesn'tAa(());work?的拷贝,它基于Aa());形式的解析,其OP认为可以使用额外的集合默认构造一个A对象括号。相比之下,我的问题是关于2个类,f和g,其中f具有默认构造函数,而g的构造函数采用f。我想用一个临时的f参数调用g的构造函数,而不使用统一的初始化语法。g的构造函数中有一个std::cout语句,因此缺少输出表示函数声明而不是g对象实例化。我在注释中用3个数字注释了示例代码。#1和#2编译时#3被注释掉,反之亦然:#includestructf{};structg{g(f){std::cout#1:我认为#1声明了一

c++ - 是否可以在不创建临时变量的情况下将 "pass"设置为未命名参数?

我正在使用未命名参数编写一个简单的基于类型的调度程序,我想这是很正常的事情。当真正调用该函数时,我想在手头没有任何变量的情况下进行重载。可能吗?例如voidf1(int/*canchangethetype*/){}intmain(int,char*){f1(/*whattoputhere?*/);return0;}我的“真实”示例是一个简单的基于类型的调度程序。我想出的最好的办法是将指针作为未命名参数,我认为它的开销可能最少:#includeusingnamespacestd;templateclassA{public:A(constU&u):u(u){};templateTget_a

c++ - boost 测试 : catch user defined exceptions

如果我的代码中有用户定义的异常,我将无法进行Boost测试将它们视为失败。例如,BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES(MyTest,1)BOOST_AUTO_TEST_CASE(MyTest){//codewhichthrowsuserdefinedexception,notderivedfromstd::exception.}我收到一条通用消息:Caughtexception:....unknownlocation(0):....它不会将此错误识别为失败,因为它不是std::exception。所以它不遵守expected_failures条款

c++ - 哪个更好 : Function overriding or passing a function pointer for event handling

因此,我正在为一个类编写代码,该类将进入一个供其他人使用的库。此类将拦截和处理传入的消息(细节并不重要,但它使用activemq-cpp库)。这个消费类的轮廓是classMessageConsumer{...public:voidrunConsumer();virtualvoidonMessage(constMessage*message);}其中runConsumer()建立连接并开始监听,并在收到消息时调用onMessage()。我的问题是:使用此代码的人将各自有自己的方式来处理不同的消息。我怎样才能保持MessageConsumer通用但提供这种灵active,同时保持代码简单?

c++ - 如果在 user.hpp 中定义了 BOOST_NO_EXCEPTIONS,为什么不能编译 boost::shared_ptr

我有一个嵌入式系统,想在这个系统中使用boost,但需要禁用异常,因为我不想支付异常成本。boost给了一个user.hpp和可设置的宏选项BOOST_NO_EXCEPTIONS和BOOST_NO_EXCEPTION_STD_NAMESPACE,但是boost::shared_ptr不能编译(更准确的说,不能链接)如果定义了这两个宏。shared_ptr_boost.cpp:(.text._ZN5boost6detail12shared_countC2IiEEPT_[_ZN5boost6detail12shared_countC5IiEEPT_]+0x7a):undefinedrefe

c++ - 使用 C++ 的 OpenGL : vtable troubles when passing class array to glTexImage2d

我用floatr、floatg、floatb、floatalpha创建了一个类Color。它有一个带有虚拟析构函数的基类。我正在尝试将Color数组传递给opengl函数glTexImage2D,其中GL_RGBA组织类型为float(这将是一个数组{floatr,floatg,floatb,floatalpha}).这要求Color仅包含4个float(16字节大小)。但是,sizeof(Color)显示我的类有一个20字节的大小,因为Color的基类有一个vtable,感谢析构函数。如何保留我的vtable并将我的Color数组传递给glTexImage2D?