问题标签 [typename]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
216934 浏览

c++ - 我必须在哪里以及为什么要放置“模板”和“类型名称”关键字?

typename在模板中,我必须在哪里以及为什么必须放置template依赖名称?
究竟什么是从属名称?

我有以下代码:

我遇到的问题是typedef Tail::inUnion<U> dummy在线。我相当肯定这inUnion是一个从属名称,VC++ 对此感到窒息是完全正确的。
我也知道我应该能够添加template某个地方来告诉编译器 inUnion 是一个模板 ID。但具体在哪里?然后它应该假设 inUnion 是一个类模板,即inUnion<U>命名一个类型而不是一个函数吗?

0 投票
5 回答
28555 浏览

c++ - 为什么我需要在 g++ 中使用 typedef typename 而不是 VS?

自从 GCC 发现我已经有一段时间了,但它就发生在今天。但我从来不明白为什么 GCC 需要在模板中使用 typedef typename,而 VS 和我猜想 ICC 不需要。typedef typename 是“错误”还是过于严格的标准,还是留给编译器编写者的东西?

对于那些不知道我的意思的人,这里有一个示例:

上面的代码在 VS 中编译(可能在 ICC 中),但在 GCC 中失败,因为它想要这样:

注意:这不是我正在使用的实际功能,而只是演示问题的一些愚蠢的东西。

0 投票
2 回答
1349 浏览

c++ - 帮助将模板类的 intrusive_ptr 存储在 std::map 中

我有一个 Locker 类型的小型模板类,包含在我想存储在 std::map 中的 boost::intrusive_ptr 中:

Locker 只是一个容器类;它的构造函数看起来像:

在我对这门课的测试中,我正在尝试执行以下操作:

我收到以下编译错误:

请帮忙

0 投票
4 回答
15167 浏览

c++ - 如何将类型名作为函数中的参数?(C++)

我需要能够将类型名作为参数传递:

FileRead(std::fstream, int pos, ???) 的概念是读取 pos*sizeof(无论类型是什么) 以获得所需的位置。我试过模板:

但这要求我每次想使用 FileRead 时都创建一个要使用的类型的变量,而且我真的不想仅仅因为一个函数而重新设计整个程序,所以无论如何都要使用类型名作为参数?

0 投票
10 回答
154231 浏览

c++ - C ++获取模板中的类型名称

我正在编写一些模板类来解析一些文本数据文件,因此很可能绝大多数解析错误是由于数据文件中的错误造成的,这些错误大部分不是由程序员编写的,所以需要关于为什么应用程序无法加载的好消息,例如:

解析 example.txt 时出错。[MySectiom]Key 的值(“notaninteger”)不是有效的 int

我可以从传递给模板函数的参数和类中的成员变量中计算出文件、节和键名,但是我不确定如何获取模板函数试图转换为的类型的名称。

我当前的代码看起来像,专门针对纯字符串等:

我宁愿不必为数据文件可能使用的每种类型都进行特定的重载,因为它们有很多......

我还需要一个解决方案,除非发生异常,否则不会产生任何运行时开销,即我想要一个完全编译时的解决方案,因为这段代码被调用了很多次并且加载时间已经变得有些长了。

编辑:好的,这是我想出的解决方案:

我有一个 types.h 包含以下内容

然后我可以在 cpp 文件中为我需要处理的每种类型使用 DEFINE_TYPE_NAME 宏(例如,在定义要开始的类型的 cpp 文件中)。

然后链接器能够找到适当的模板特化,只要它在某处定义,否则抛出链接器错误,以便我可以添加类型。

0 投票
5 回答
1204 浏览

c++ - Why is the use of typedef in this template necessary?

When I compile this code in Visual Studio 2005:

I get these errors:

If I add a typedef to the CFooVector template, I can get the code to compile and work:

My question is, why does the typedef work when using the bare 'typename std::vector>::iterator' declaration did not work?

0 投票
1 回答
37175 浏览

c++ - 函数的 C++ 模板特化:“非法使用显式模板参数”

以下模板特化代码:

测试用例 1:

测试用例 2:

生成以下编译错误:

错误 C2768:“spec1”:非法使用显式模板参数

有谁知道为什么?

0 投票
4 回答
6925 浏览

c++ - C ++模板化构造函数不会编译

为什么我不能用上面的构造函数实例化 Foo 类型的对象?

我有一个使用内部 typedef 的类 Bar (作为“模板 typedefs”的解决方法)并打算在构造函数中使用它,如下所示(案例 1)。但是,我似乎没有让它编译。这是合法的 C++ 吗?CASE 2 似乎表明问题与 Bar 中的 typedef 有关。

如何定义一个构造函数来接受具有 Bar 中类型的对象的 std::vectors?

0 投票
3 回答
6282 浏览

c++ - 使用 STL 容器和 typedef 的 C++ 模板类

我有一个看起来像这样的课程:

这段代码正在运行,我在其他类中这样调用它:

现在我希望能够将容器切换到另一个容器,比如一个列表。所以我认为 typedef 会很整洁。它应该是这样的

0 投票
1 回答
680 浏览

templates - 在模板(非成员)函数中使用模板类中的 typedef

以下无法编译(无论如何,在 Linux 上使用 gcc 4.2.1):

问题在于这一行:

...并且编译器提出了这个抱怨:

foo.c:在函数'void templated()'中:

foo.c:22:错误:预期的 `;' 在“酒吧”之前</p>

通常在没有声明类型时会看到这一点,但据我所知,Foo< T >::FooType 在 templated() 中应该是完全有效的。