草庐IT

weak-template-vtables

全部标签

c++ - 通过weak_ptr创建单例类是否正确

我创建了一个父类来处理带有智能指针的单例模式:.h文件:templateclassSingleton{public:staticstd::shared_ptrGetInstance();private:staticstd::weak_ptrm_singleObject;};.cpp文件:templatestd::shared_ptrSingleton::GetInstance(){autoshareObject=m_singleObject.Lock();if(!shareObject){shareObject.reset(newsingleType);m_singleObject=s

c++ - 默认参数模板与可变参数模板 : what is the last template parameter?

我有点困惑,因为默认参数模板和可变参数模板参数都必须是模板的最后一个参数。那么我的函数的良好官方语法是什么?templatemyFunction(/*SOMETHING*/)或templatemyFunction(/*SOMETHING*/) 最佳答案 实际上,模板参数包和默认参数没有是函数中的最后一个,如果它之后的任何内容将被推断(或默认):templatevoidf(T3){}请注意,您永远不能为T2指定任何内容,因为所有内容都将被可变参数包吞噬。由此得出结论,如果要手动指定可变参数包,则将可变参数包放在默认参数之后是有意义的。

c++ - "template <class T>"和 "template <typename T>"有什么区别?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Use'class'or'typename'fortemplateparameters?我看到两个不同的模板类声明:templateclassSampleClass1{//...};和templateclassSampleClass2{//...};这两个代码有什么区别?编辑:我将错误的关键字“typedef”更正为“typename”。 最佳答案 如果通过templateclassSampleClass2你是说templateclassSampleCla

c++ - 虚拟类的每个对象是否都有指向 vtable 的指针?

虚类的每个对象都有指向vtable的指针吗?还是只有带虚函数的基类对象才有?vtable存储在哪里?进程的代码段还是数据段? 最佳答案 所有具有虚方法的类都将拥有一个由该类的所有对象共享的vtable。每个对象实例都有一个指向该vtable的指针(这就是找到vtable的方式),通常称为vptr。编译器隐式生成代码来初始化构造函数中的vptr。请注意,这些都不是C++语言强制要求的——实现可以根据需要以其他方式处理虚拟调度。但是,这是我熟悉的每个编译器都使用的实现。StanLippman的书《深入了解C++对象模型》描述了它是如何工

c++ - GCC 警告 : ignoring attributes on template argument (-Wignored-attributes) 的含义

我使用__m256作为模板类的参数(参见下面的代码)。在Ubuntu 16.10上使用g++版本6.2进行编译时(YakketyYak),它警告我模板参数上的属性被忽略:warning:ignoringattributesontemplateargument‘__m256{aka__vector(8)float}’[-Wignored-attributes]typedefvec_arrayvec256__m256类型似乎有一些与对齐有关的属性(也许还有一些其他属性?)。下面显示的这个原始容器类(并生成警告)的唯一目的是为这些特殊的Intel变量(__m256、__m128等处理堆上的内

c++ - 运行时的 Vtable 修改

对于那些使用vtables的编译器实现:是否存在虚拟函数表在运行时更改的情况?还是vtables只是在编译时填充,而在运行时没有执行任何操作来修改它们? 最佳答案 我不知道有任何具有多态性实现的C++ABI,它使用在运行时更改的虚拟表。无论如何,它不会很有用,因为虚拟表通常描述代码的属性(成员函数之间的关系,w.r.t.在类层次结构中的位置)并且C++代码在运行时不会改变。因为它没有用,所以会很浪费。 关于c++-运行时的Vtable修改,我们在StackOverflow上找到一个类似的

c++ - 对类方法进行指针部分特化时获取 "illegal use of explicit template arguments"

您好,我遇到了部分特化的问题。我想要做的是有一个具有模板成员函数的类,该函数将给定值解释为用户指定的值。例如,类名是Value,这是我想做的一个片段:int*ptr1=newint;*ptr1=10;Valueval1=ptr1;int*ptr2=val1.getValue();Valueval2=1;inttestVal=val2.getValue();这是我实现此类的方式:structValue{Value(void*p):val1(p){}Value(inti):val2(i){}templateTgetValue();void*val1;intval2;};templateT*

C++ 元编程 : A template parameter which *must* inherit an abstract class

我有一个用于可比较+哈希值的抽象类:classKey{public:virtualbooloperator==(constKey&)const=0;virtualbooloperator!=(constKey&)const=0;virtualu32hashcode()const=0;};还有一些继承这个的具体类C。classC:publicKey{private:u32a,b;public:staticconstC&null;//aprototypeforrepresentinga"novalue"C//Somereasonableimplementation;it'sjustapai

C++11 `using` 关键字 : specialize template alias of template parameter

我今天在使用using时遇到了问题C++11中的关键字.我决定现在使用另一种方法(在下面的示例中添加为注释)。你可以想到X作为矩阵,Y作为mixin,目的是访问X的转置矩阵类型在Y.而不是typedef学习X在X,我们采用另一种更强大的方法并定义Sibling本身带有两个模板参数的别名。templatestructX{usingLeft=A;usingRight=B;templateusingSibling=X;//usingReversed=X;//WhatIreallywantandusenow.:-)};templatestructY{usingLeft=typenameA::L

c++ - 是否有 boost::weak_intrusive_pointer?

出于遗留原因,我需要使用侵入式指针,因为我需要能够将原始指针转换为智能指针。但是我注意到没有用于boost的弱侵入性指针。我确实在boost线程列表中找到了有关它的讨论,但没有具体内容。有人知道弱侵入指针的线程安全实现吗?谢谢丰富 最佳答案 这没有任何意义。详细说明:weak_ptr指向与shared_ptr相同的counter对象实例。当shared_ptr超出范围时,counter的实例保持不变(有效计数为0),这允许weak_ptr实例检查它们是否有效地指向一个已释放的对象。使用侵入式计数,计数器集成在对象中。当计数达到0时,