typename相关内容
在模板中,我必须在何处以及为什么必须将 typename 和 template 放在依赖名称上? 究竟什么是从属名称? 我有以下代码: 模板//Tail 也将是一个 UnionNode.结构联合节点:公共尾巴{//...模板结构联合{//Q: 在哪里添加类型名/模板?typedef Tail::inUnion假;};模板 我遇到的问题在于 typedef Tail::in
..
GCC 已经有一段时间没有抓住我了,但它就发生在今天.但我从来不明白为什么 GCC 需要在模板中使用 typedef typename,而 VS 和我猜想 ICC 不需要.typedef typename 是“错误"还是过于严格的标准,还是留给编译器编写者的东西? 对于那些不明白我的意思的人,这里有一个示例: templatebool find(const std::map
..
我从 typename 得到了一些意想不到的结果,我很困惑.希望有些人可以为我指明正确的方向. 私有子T()Dim d 为 Word.DocumentDim s 作为字符串Dim c As Collection昏暗的我变暗作为对象设置 d = ActiveDocuments = "X"设置 c = 新集合Debug.Print "d 是一个 " &类型名称(d)Debug.Print "s 是一
..
在 C++ 中,需要 typename 关键字,以便编译器可以消除模板中嵌套类型和嵌套值之间的歧义.但是,在某些情况下是不可能出现歧义的,例如派生类继承自嵌套类类型时. template 派生类:公共 T::type{ }; 此处typename 关键字不是必需的,实际上甚至不允许使用.这是有道理的,因为上下文消除了歧义.在这里,T::type 必须引用一个类型,因为你显然不能从一个值继承.
..
我最近一直在做一个小项目,但我想不出什么.. 我得到了一个包含类的 .h 文件,使用了 typename 模板.在那个班级里面有一个私人班级. template 类东西{上市:某物();〜某事();节点* Function1(int index);int Index(const T& id);私人的:类节点(){上市:T id;//想象其余的节点};}; 当我想定义“Something"
..
考虑这个代码, template结构体示例{类型名称 T::X *x;//声明指向T的X的指针}; 在上面的代码中,关键字typename是编译器所必需的,以便它可以在模板中消除嵌套类型和嵌套值之间的歧义.这意味着,在没有 typename 关键字的情况下,编译器会将其解释为 T::X 与 x 的乘法, T::X *x;//将 T::X 与 x 相乘 因此在可能出现歧义的情况下,关键字ty
..
考虑以下头文件: template 结构节点{数据;//该节点中包含的数据list*>子节点;//此tNode下的tNodes指针列表tNode(const T& theData)//PRE:数据被初始化//POST: this->data == theData 和 this->SubNodes 有一个初始容量//等于INIT_CAPACITY,设置为子节点的头部{this->Data = th
..
A 类{静态整数迭代器;类迭代器{[...]};[...]}; 我(认为我)理解这里需要 typename 的原因: template 无效的 foo() {类型名 T::iterator* iter;[...]} 但我不明白为什么这里不需要typename: void foo() {A::迭代器*迭代器;[...]} 谁能解释一下? 编辑: 后面编译器没有问题的原因,我在评
..
我正在编写一些模板类来解析一些文本数据文件,因此很可能绝大多数解析错误都是由于数据文件中的错误引起的,而这些错误大部分不是由程序员编写的,所以需要一个关于为什么应用程序加载失败的好消息,例如类似: 解析 example.txt 时出错.[MySectiom]Key 的值 ("notaninteger") 不是有效整数 我可以从传递给模板函数的参数和类中的成员变量中计算出文件、部分和键的
..
可能的重复: 正式来说,typename 是做什么用的? 我必须将模板放在哪里以及为什么和 typename 关键字? 考虑下面的代码: templateC类{结构 P {};向量
vec;无效 f();};模板void C::f() {typename vector ::iterator p = vec.begin();} 为什么在这个例子中需要“typename"关键字
..
根据本书 C++ Primer 部分,7.4.1 Type Names Are Special: 通常,内部作用域可以从外部作用域重新定义名称,即使该名称已在内部作用域中使用.但是,在类中,如果成员使用外部作用域中的名称并且该名称是类型,则该类随后可能不会重新定义该名称. 相应地,例如: typedef double Money;类帐户{民众:钱余额(){ 返回 bal;}私人的:t
..
在模板中,我必须将 typename 和 template 放在从属名称的何处以及为什么? 究竟什么是从属名称? 我有以下代码: template //Tail 也将是一个 UnionNode.struct UnionNode : 公共尾{//...模板结构体联合{//Q: 这里在哪里添加类型名/模板?typedef Tail::inUnion假的;};模板{};};模板 //对于最后一
..
我在声明如下所示的模板化类型时遇到了很大的困难. #include #include 使用命名空间标准;模板Foo类{typedef T 栏;};模板typedef typename Foo::Bar Bar;int main(int argc, char *argv[]){吧台;Foo富;系统(“暂停");返回退出成功;} 我收到错误 `typedef typename Foo::B
..
因此,我找到了许多文章和帖子,说无法将 typename 转换为 string ,但是我没有找到相反的方法.我有一个具有专业化功能的 template : 模板无效foo(T sth){}模板void foo(int sth){}... 我正在从一个像这样构造的文件中读取内容: int 20双重12.492字符串词 是否有一种方法可以根据文件
..
我正在尝试编写模板的变体定义super类型习语的类.类Inherit引入了类型Super来表示可能非常长的超级类型,并且还需要知道派生的类型New来做一些我在这里没有显示的额外操作. 如果传递给New的类型不是模板,但对于模板失败,则可以正常工作.这是用clang++-3.8 -std=c++1y -Wall编译的完整示例(gcc给出相同的输出): struct SomeBase {}
..
考虑以下代码: struct S { struct type {}; type type; }; int main() { typename S::type t; (void) t; } 除了这不是一个好主意的事实外,我在阅读了关于SO的另一个问题后正在进行实验. 我发现上面的代码段是 GCC编译没有错误,它是 错误:类型名称说明符指向'S'中的
..
从属类型通常需要typename来告诉编译器成员是类型,而不是函数或变量. 但是,并非总是如此. 例如,基类不需要此,因为它只能是类型: template struct identity { typedef T type; } template class Vector : identity >::type { }; // n
..
我正在尝试创建一个从std::map或std::unordered_map获取键的函数.我可以使用简单的重载,但首先,我想知道这段代码有什么问题. template class TContainer> std::vector getKeys(const TContainer
..
我对以下代码有疑问: template class lamePtr { public: typedef U* ptr; }; template class smarterPointer { public: void funFun() { typedef lamePtr someType
..
以下模板专业化代码: template void spec1() { } 测试案例1: template //compile error void spec1() { } 测试案例2: template //compile error void spe
..