using-declaration相关内容
我知道在 C++11 中我们现在可以使用 using 来编写类型别名,例如 typedefs: typedef int MyInt; 据我了解,相当于: 使用 MyInt = int; 新语法源于努力表达“模板类型定义": 模板
..
命名空间 A{诠释我;}诠释主要(){使用 A::i;使用 A::i;} VS2010 - 编译良好 gcc (ideone) - 编译良好 Comeau - 给出错误“ComeauTest.c",第 10 行:错误:“i"已在当前范围内声明使用 A::i;" $7.3.3/8 - “使用声明是声明,因此可以使用反复在哪里(并且只在哪里)允许多个声明." 上面的例子表明代码确实格
..
我知道在 C++11 中我们现在可以使用 using 来编写类型别名,比如 typedefs: typedef int MyInt; 据我所知,相当于: using MyInt = int; 这种新的语法是为了有一种表达“模板类型定义"的方法而产生的: 模板使用 MyType = AnotherType; 但是,对于前两个非模板示例,标准中是否还有其他细微差别?例如,typedefs
..
是否可以使用 typedef 或 using 在概念内声明类型别名,如概念 TS 所提议的那样?如果我尝试类似下面的 MWE,代码不会编译(使用 gcc 6.2.1 和 -fconcepts 开关) #include 模板概念 bool TestConcept (){返回要求(T t){使用 V = T;std::is_integral::value;};}int main(){返回0;}
..
根据C ++ 11标准,第7.3.3节[namespace.udecl]/1: 使用声明将名称引入显示使用声明的声明区域. 使用声明: 使用类型名 opt 嵌套名称说明符unqualified-id ; using :: unqualified-id ; 在使用说明中出现的声明区域中声明使用声明中指定的成员名称. 在使用声明出现的声明区域中声明名称是什么意思?
..
使用 声明似乎不适用于枚举类型: class Sample {上市:枚举颜色{红色,蓝色,绿色};}使用Sample :: Colour; 不起作用! 我们是否需要为每个枚举类型的枚举符添加一个 using 声明?如下所示: 使用sample :: Colour :: RED; 解决方案 一个类未定义名称空间,因此“使用"表示该名称空间.在这里不适用. 此外,您需要公开
..
结构B1 { int d; void fb(){}; }; 结构B2:B1 { 使用B1 :: d; 使用B1 :: fb; int d; //为什么会产生错误? void fb(){} //,这不是吗? }; int main(){} 是因为, B1 :: fb()被视为 B1 :: fb(B1 *) 和B2 :: fb()被视为 B2 :
..
我正在尝试实现可变的访问者类。 template class VisitorBaseFor {受保护的 :虚拟的 〜VisitorBaseFor()=默认值; 公共: 虚拟无效访问(T& t)= 0; }; template class VisitorBase:public VisitorBaseFor
..
Microsoft编译器(Visual Studio 2017 15.2)拒绝以下代码: #include 结构B { template = 0> void f(){} }; 结构D:B { 使用B :: f; template
..
我想提供子类中基类对现有类型的访问. 我发现了两种不同的方式: struct A { typedef int mytype; }; struct B { typedef double mytype; }; 我可以使用using声明“包含"类型: struct C : A, B { using typename A::mytype; }; 或者
..
这不是关于using和typedef在创建类型别名方面的区别的问题.我想提供从代码块或函数内部的命名空间访问现有类型的方法. 我发现了两种不同的方式: 我可以使用using声明“包含"类型: using typename mynamespace::mytype; 或者我可以创建一个类型别名: typedef mynamespace::mytype mytype; us
..
以下,结构Y重载了X的成员函数f.这两个重载都是模板函数,但是采用不同的参数(typename和int)进行明确指定: struct X { template static bool f() { return true; } }; struct Y : public X { using X::f; template static b
..
在我的应用程序中,我想在旧式函数签名上传递参数包,并更改值.这是通过尝试作为注释来说明我的问题的代码: #include #include void LegacySignature( void* param ); template // using ???; // attempt: can 'template
..
我试图了解在名称空间中包含using声明会引起什么样的错误.我考虑了这些 我正在尝试创建一个示例,其中由于使用using声明而导致一个错误,该错误是由于将一个名称静默替换为在另一个文件之前加载的头文件而引起的. 这里我要定义MyProject::vector: // base.h #ifndef BASE_H #define BASE_H namespace MyProject {
..
这是问题的后续操作,此处关于具有依赖于参数的查询(ADL)的函数重载.我想检查一下我在这种情况下对规则的理解,因此编写了一些测试代码. 首先,当然,std中没有HasPtr类的交换,因此我编写了自己的命名空间,除了在全局范围中已定义的命名空间之外,该命名空间还包含交换的HasPtr版本. using声明的工作与我预期的一样-产生了歧义错误,因为已经定义了交换的HasPtr版本,如5ed中的"
..
这是有问题的代码,显示在5ed的"C ++ Primer"的第13.3节中: void swap(Foo &lhs, Foo &rhs) { using std::swap; swap(lhs.h, rhs.h); // uses the HasPtr version of swap // swap other members of type Foo } 这本书提
..
namespace A{ int i; } int main(){ using A::i; using A::i; } VS2010-可以正常编译 gcc(ideone)-可以正常编译 Comeau-给出错误“"ComeauTest.c",第10行:错误:"i"已在当前作用域中声明 使用A :: i;" $ 7.3.3/8-“使用声明是一个 声明,因此可以
..
我们在标准中有以下简单(并稍加修改以添加main和输出)示例: struct A { virtual void f() { cout
..
我尝试创建无法与原始别名区分开的模板别名. 因此,我创建了特征以检查2个模板(非类型)是否相等: template class C1, template class C2> struct is_same_template : std::false_type {}; template
..
struct level0 { virtual void foo()= 0; }; struct level1:level0 { virtual void foo(){cout
..