草庐IT

c++ - 如何从类模板自身的类定义中引用类模板作为模板?

场景如下:templateclassT,typenameV>structparent{voiddo_something();};templatestructchild:publicparent{voiddo_something(Vargument);usingparent::do_something;//C3200:invalidtemplateargumentfortemplateparameter'IMPL',expectedaclasstemplate};以上代码无法在给定行上编译并出现给定错误(MSVC9.0)。但是,如果我改写这个,在child的类定义之外:templates

c++ - 限制多个模板参数友元函数可访问的类实例的范围

我想知道我的目标是否可行。我有一个这样的类#includetemplateclassClass;templateClassf(Class&C,constClass&D);templateclassClass{protected://thiscouldbeprivateTm_t;public:Class():m_t(T()){}Class(Tt):m_t(t){}T&getT(){returnm_t;}templatefriendClassf(Class&C,constClass&D);};templateClassf(Class&C,constClass&D){C.m_t+=D.m_t

c++ - 使用 lambda 访问成员函数内的类模板参数类型失败

我有一个带有成员函数的类模板,该函数有一个想要使用类模板参数类型的lambda。它无法在lambda内部编译,但如预期的那样在lambda外部成功编译。structwcout_reporter{staticvoidreport(conststd::wstring&output){std::wcoutclassagency{public:voidreport_all(){reporter::report(L"dummy");//Compiles.std::for_each(reports_.begin(),reports_.end(),[this](conststd::wstring&r

c++ - 在 C++ 中,在 STL 容器中存储具有重载 "operator&"的类对象是否合法?

根据C++03标准(23.1/3),只有copy-constructible类对象可以存储在STL容器中。Copy-constructible在20.1.3中描述并且要求“&”产生对象的地址。现在假设我有这个类:classClass{public:Class*operator&(){//dosomeloggingreturnthis;}constClass*operator&()const{//dosomeloggingreturnthis;}//whateverelse-assumeitdoesn'tviolaterequierements};此类对象是否可以合法存储在STL容器中?

c++ - 具有独占继承构造函数的类的值初始化

根据cppreference没有任何用户提供的构造函数的非union类类型将在构造之前被零初始化:IfTisannon-unionclasstypewithoutanyuser-providedconstructors,thentheobjectiszero-initializedandthentheimplicitly-declareddefaultconstructoriscalled(unlessit'strivial)我不确定在使用c++11继承的构造函数时会发生什么,因为引文明确提到了隐式声明默认构造函数。给定以下示例:#includestructA{inta;A(){}A(

c++ - 为什么要创建一个只有一个成员的类,即 operator()?

这个问题在这里已经有了答案:WhatareC++functorsandtheiruses?(14个答案)关闭5年前。我试图找出-在那里-一个很好的技术理由来定义一个只包含一个成员的类,而这个成员恰好是一个operator()。我偶然发现有人-无论出于何种原因-创建了一个包含几个类的命名空间,但每个类只包含一个operator()作为成员。我很清楚,这些类可能会像方法一样被使用(很有可能),但为什么这是一个很好的技术方法(我假设有一个很好的方法),而不是简单地定义一组单例类中的不同方法,在这种特殊情况下属于我上面提到的命名空间。命名空间类似于:namespacemyNamespace{c

c++ - 为什么下面的类有一个虚拟表?

假设我有一个菱形继承(钻石问题)情况如下:classA{public:virtualvoidfoo(){};};classB:publicvirtualA{public:virtualvoidfoo(){};};classC:publicvirtualA{public:virtualvoidfoo(){};};classD:B,C{};最后一行产生了一个编译错误,引用了歧义。据我了解,问题是编译器不知道将哪个foo放在D的vtbl中,但是如果D没有定义自己的虚函数,为什么还要有一个vtbl? 最佳答案 您正在继承包含虚函数的类。因此

c++ - 模板类中没有名为 X 的类模板

当尝试使用GCC4.6.0编译此(类CRTP)代码时:templateclassT>structA;templatestructB:A::templateX>{templatestructX{Umem;};};Ba;我收到错误消息“test.cpp:3:26:错误:‘structB’中没有名为‘X’的类模板”。为什么X在类定义之外似乎是不可见的? 最佳答案 正如EmileCormier正确指出的那样here问题是在A实例化的地方,B仍然是一个不完整的类型,你不能使用内部模板。解决方案是将模板X移到模板B之外。如果它独立于模板B的特定

c++ - 我们可以在 C++ 的类中定义 hashcode 方法吗

我正在尝试用C++实现一个类,我希望每个类都有自己的哈希码实现(基本上将其用作unordered_map和unordered_set)例如:classCustomClass{inta;vectorb;stringc;booloperator==(constCustomClass&o)const{return((a==o.a)&&(b==o.b)&&(c==o.c));}/*Isitpossibletodefinethehashcodefunctionhereinsteadofdefiningitoutsidetheclass.size_toperator()()const{//Some

c++ - 不抛出但依赖于抛出的库的类

我写了一些不抛出异常的类,但它们使用了STL,而STL可以抛出异常。例如,在我的类(class)中有使用std::vector、std::list、std::string的函数。STL在复制字符串或创建vector时可能会抛出错误,对吗?所以我不能将我的类(class)描述为没有异常,对吧?遇到这种情况你们怎么办?您是否将每个函数都包装在try/catch中?你如何描述你的类(class)?谢谢 最佳答案 正确,如果您从特定成员函数调用的任何内容(包括构造函数、编译器为您提供的隐式调用等)可以抛出异常,那么该成员函数也可以抛出异常。