在 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/