相关疑难解决方法(0)

为什么不能使用"typename"引入模板模板参数?

在C++中,模板模板参数只能与class关键字一起引入.为什么以下是非法的:

template<template<typename> typename C>
struct A {};
Run Code Online (Sandbox Code Playgroud)

鉴于最近的一项提案(在isocpp.org标题中有特色)试图克服它,我正在寻找这种限制背后的理性.

c++

5
推荐指数
0
解决办法
119
查看次数

为什么以下模板声明格式不正确?

为什么以下声明无效?

template<template<typename> typename T>
struct S {};
Run Code Online (Sandbox Code Playgroud)

我认为这是有效的,因为以下是有效的:

template<template<typename> class T>
struct S {};
Run Code Online (Sandbox Code Playgroud)

我可以从[gram.temp]中的标准中读到它似乎是有效的,但是gcc给了我以下输出:

prog.cpp:4:38: error: expected 'class' before 'T'
 template<template<typename> typename T>
                                  ^
Run Code Online (Sandbox Code Playgroud)

c++ standards templates c++11

5
推荐指数
1
解决办法
286
查看次数

模板模板参数,为什么类是强制的?

如果我写的话,标题几乎说明了一切;

                                        vvvvv
template <template <typename, typename> class StdContainer, typename T>
class DerivedContainer: public StdContainer<T, std::allocator<T>>
{ /*...*/ };
Run Code Online (Sandbox Code Playgroud)

为什么需要 class 关键字?那是当 typename 被允许时,作为所有其他模板上下文中的替代品。消歧?标准的哪一部分也说明了这一点?

笔记; 我不是从标准容器派生的,这只是一个例子。

c++ templates

3
推荐指数
1
解决办法
248
查看次数

标签 统计

c++ ×3

templates ×2

c++11 ×1

standards ×1