gpt4 book ai didi

c++ - 模板模板模板参数是扩展还是标准的一部分?

转载 作者:可可西里 更新时间:2023-11-01 16:38:21 30 4
gpt4 key购买 nike

我正在搜索与模板模板参数相关的其他内容,偶然发现了 this answer它声称标准允许模板模板参数。

但是,以下代码在最新的 clang (3.2) 和最新的 GCC (4.8) 中编译:

template<template<template<typename> class> class T> struct test {};
template<template<typename> class T> struct foo {};
test<foo> bar;

这是一个扩展,还是其他答案实际上是错误的并且是标准允许的?如果不是,是否有任何特殊原因遗漏?

最佳答案

std::vector<int>类模板 std::vector传递类型 int作为参数。在 std::get<42>(some_tuple) , 函数模板 std::get传递值 42作为参数。也许缺乏想象力,前一种参数称为模板的类型参数(或模板类型参数),而后一种是(模板)非类型参数。

但是模板也可以接受另一种参数:其他模板。例如template<template<typename> class T> void foo();声明一个以模板作为参数的函数模板,它本身接受一个类型参数。 (请注意,虽然模板不是类型,但术语“非类型参数”仍然不涵盖模板模板参数。它是为 template<int NonTypeArgument> 等参数保留的。)

因为在 C++ 中没有模板模板这样的东西(有类、函数和别名模板——但它们总的来说只是简单的"template"),所以没有模板模板模板参数这样的东西.你所拥有的是一个运行模板模板参数,其中预期的模板参数本身有一个模板模板参数。我在标准中找不到禁止这样做的引用,例如您链接声明的答案。

关于c++ - 模板模板模板参数是扩展还是标准的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11338019/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com