Adi*_*dib 18 c++ templates c++14
标准(§14.1)模板参数说:
允许模板模板参数的模板参数具有默认模板参数.
现在考虑以下代码:
#include <iostream>
using namespace std;
struct A {};
struct B {};
template<typename T = A>
struct X;
template<>
struct X<A> {
static void f() { cout << 1 << endl; }
};
template<>
struct X<B> {
static void f() { cout << 2 << endl; }
};
template< template<typename T = B> class C>
void g() {
C<>::f();
}
int main() {
g<X>();
}
Run Code Online (Sandbox Code Playgroud)
它的输出是:
出局:2
在这种情况下,模板模板参数是C.
但我不明白为什么 C<B>::f()被称为内部g().
这个宣言
template< template<typename T = B> class C>
void g() {
C<>::f();
}
Run Code Online (Sandbox Code Playgroud)
相当于
template< template<typename T = B> class C>
void g() {
C<B>::f();
}
Run Code Online (Sandbox Code Playgroud)
因此这个电话
g<X>();
Run Code Online (Sandbox Code Playgroud)
相当于函数的调用
void g() {
X<B>::f();
}
Run Code Online (Sandbox Code Playgroud)
C++标准的第14.1.14段包含相应的示例
14模板模板参数的模板参数允许具有默认模板参数.如果指定了此类默认参数,则它们将应用于模板template-parameter范围内的模板template-parameter.[例:
template <class T = float> struct B {};
template <template <class TT = float> class T> struct A {
inline void f();
inline void g();
};
template <template <class TT> class T> void A<T>::f() {
T<> t; // error - TT has no default template argument
}
template <template <class TT = char> class T> void A<T>::g() {
T<> t; // OK - T<char>
}
Run Code Online (Sandbox Code Playgroud)
- 末端的例子]
| 归档时间: |
|
| 查看次数: |
417 次 |
| 最近记录: |