c++ - 为什么不能模板化模板?

标签 c++ templates

在 C++ 中有 2 种模板类型(据我所知):模板类和模板函数。为什么不能有模板的模板? (无论是类、函数还是其他模板)。标准中是否考虑过它?它是否以某种方式破坏了 C++ 语法/精神? 我知道这听起来可能很疯狂,而且很容易解决。

C++ 的可能性:

template<bool b>
class TemplateDependingOnBool
{
public:
  template<typename T>
  class TheTemplateWeWant{};
}

什么会很棒:

template<bool b>
template<typename T>
class TheTemplateWeWant{};

并以基于策略的方式调用它(这才是真正有趣的地方):

template<typename T, template<typename> class ThePolicy = TheTemplateWeWant<true> >
class Foo {};

现在可行的方法是使用:

template<typename T,
  template<typename> class ThePolicy = TemplateDependingOnBool<true>::TheTemplateWeWant >
class Foo{};

这不是很优雅。

编辑:
我知道我可以使用 2 个参数作为模板。目标是单独使用底层模板类(模板化模板),无论是在模板别名还是模板模板参数中(如我的示例所示)。 基于策略的设计引用了 Andrei Alexandrescu 的 Modern C++ Design ,这就是为什么我要问的功能可能有用的主要原因(因为模板用作模板参数)。

最佳答案

对于 C++11,您假设只有两种类型的模板是错误的。还有type aliases这允许

template <bool b, typename T>
class TheTemplateWeWant { ... };

template<typename T>
using ThePolicy = TheTemplateWeWant<true, T>

关于c++ - 为什么不能模板化模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32455766/

相关文章:

c++ - 在 Eclipse 中设置 OpenCV

c++ - Boost.ASIO 性能不佳

templates - 从 Rails 3 中的 View 获取模板名称

c++ - 将 C++ 方法参数转换为模板参数失败并出现编译错误

c++ - 如何同步 Lua 和 C++ 垃圾回收

c++ - 设置 vector of int 指针,指向 int vector 的元素

C++ 获取其他 Windows 消息

c++ - 使用可变参数模板重载函数模板 : Intel c++ compiler version 18 produces different result from other compilers. intel 错了吗?

c++ - 仅当底层类型具有这些构造函数时才实现模板类型构造函数

c++ - 使用强类型枚举的模板参数推导