草庐IT

unique_name

全部标签

c++ - 为什么 Google Test/Mock 通过 std::unique_ptr 显示泄露的模拟对象错误?

假设有一个Bar对象,它使用了一个Foo对象。所有权是独占的,因此Bar在其构造函数中将Foo作为std::unique_ptr获取。我想用Google测试框架测试Bar,所以我编写了以下代码:usingnamespacetesting;classFoo{public:virtualintF()=0;};classBar{public:Bar(std::unique_ptr&&foo):m_foo(std::move(foo)){}intB(){returnm_foo->F();}private:std::unique_ptrm_foo;};classMockFoo:publicFoo

C++ 宏之谜 : Printing the name of the TYPE

在宏中,我可以使用xxxx_##TYPE和##TYPE##_xxxxx来正确填写TYPE名称,但我不能在字符串中间使用##TYPE##,例如(打印“##TYPE##是类型的名称”;)有解决办法吗? 最佳答案 您可以通过结合两个特征来做到这一点。一种是“字符串化”,即通过在宏参数前加上#前缀将其转换为字符串。(这与您显然已经熟悉的“标记粘贴”运算符##相关但不同。)另一个事实是,当连续给定多个字符串文字时,C++会将它们组合起来成一个字符串。例如,"a""b""c"等同于"abc"。我不清楚你的宏到底是如何定义的,所以我不能告诉你要输

c++ - 在这种情况下 unique_ptr 的行为应该是什么?

假设我有以下内容:std::unique_ptrpA;pA(newA);在这个复杂的例子中,pA(newA);的行为应该是怎样的?是吗?据我所知,在MSVC2010中,voidoperator()(T*)const;在new之后立即调用fromdefault_delete立即返回并删除指针。而g++(4.7.0)给了我nomatchforcall(std::unique_ptr)(A*)错误。 最佳答案 代码不应编译。std::unique_ptr不会重载operator()。VisualC++2011DeveloperPrevie

c++ - std::unique_ptr<T> 不完整类型错误

我有templateclassqueue{private:structnode{Tdata;std::unique_ptrnext;//compileerroronincompletetypenode(T&&data_):data(std::move(data_)){}};std::unique_ptrhead;node*tail;public:queue():tail(nullptr){}我在VS10的标记行上遇到编译错误。在这种情况下,我是否应该被允许使用不完整的类型(实例化模板-构造函数-这里以int为例)?有解决方法吗?编辑singlethreadedqueue.h(62):e

c++ - ISO/IEC 10646 中的 "character short name"是什么?

C++112.3/2说:Thecharacterdesignatedbytheuniversal-character-name\UNNNNNNNNisthatcharacterwhosecharactershortnameinISO/IEC10646isNNNNNNNN所以我下载了ISO/IEC10646,但我找不到“字符短名称”的定义。有人可以澄清一下这是指什么吗?我最初的目标是找出为什么在使用\U指定代码点时需要8个十六进制数字,因为6个数字总是足够的。所以我也很想知道为什么C++11指定我们使用\UNNNNNNNN而不是\UNNNNNN。 最佳答案

c# - 如何通过禁用 Name Mangling 来调用实例方法

给定foo.dll中的以下c++类classa{private:int_answer;public:a(intanswer){_answer=answer;}__declspec(dllexport)intGetAnswer(){return_answer;}}我想要来自C#的pInvokeGetAnswer。为此,我使用以下方法:[DllImport("foo.dll",CallingConvention=CallingConvention.ThisCall,EntryPoint="something")]publicstaticexternintGetAnswer(IntPtrth

c++ - 具有多态类型的 unique_ptr 未被删除

我有一个使用基类派生类型存储的unique_ptrvectorstd::unique_ptr>>decisionVariables;其中Variable是父类(superclass),派生类型是Route类。我的问题是,当包含decisionVariables的类被删除时,路由实例似乎没有被删除。路由来源于变量:#ifndef__VARIABLE__#define__VARIABLE__/***Interfacefordecisionvariables.*/#include#include#includeclassVariable{public:/***Returnsanindepen

c++ - 试图仅在 C++ 中模拟 Matlab "unique"函数

我有以下vector,v=[9295]及其唯一元素c=[259]按升序排列。我想提取vectoru=[3132]。uvector包含vectorc中唯一元素的索引,从而重构vectorv。我的想法是遍历v并借助基于c的唯一值构建的哈希表来获取索引值。这有意义吗?如果是的话,你能请一些人在c++中提出一种方法吗?高度赞赏其他建议(我对有效的实现感兴趣,因为v和c矩阵足够大)。最好的问候,托特 最佳答案 C++的索引是从0开始的,这样写比较正确u={2,0,2,1};您可以使用标准算法来完成任务。例如(这里我假设vectorc已经以某种

c++ - 制作一个 const unique_ptr 然后尝试从它 std::move 给出相同的错误,就好像您试图访问复制构造函数一样

当我们尝试复制unique_ptr(例如,将一个唯一指针分配给另一个)时,我注意到错误是ErrorC2280std::unique_ptr#includeintmain(){std::unique_ptra=std::make_unique(2);std::unique_ptrb=a;}没关系,因为unique_ptr没有定义复制构造函数。您不会从唯一指针进行复制以在它们之间move(转移指针的所有权)。有趣的是(好吧,也许不是),这段代码抛出了同样的错误。现在我知道它是无效的(我将第一个unique_ptr声明为不可变对象(immutable对象)),但错误消息暗示它正在尝试调用复制

c++ - syntax::function_name 在 C++ 中是什么意思?

在名为::foo()的函数中,我不明白语法的用途。如果它是foo::count_all()那么我知道count_all是类或命名空间foo的函数。在::foo()的情况下,::引用的是什么? 最佳答案 ::运算符正在调用namespace或class。在您的情况下,它正在调用全局命名空间,它是不在命名空间中的所有内容。下面的例子说明了为什么namespace很重要。如果您只是调用foo(),您的调用将无法解析,因为有2个foo。您需要使用::foo()解决全局问题。namespaceHidden{intfoo();}intfoo()