看起来像c
是一个以“d”为参数的函数。我知道::
用于指示 namespace 及其子 namespace 。但是什么A<B>
意思?我知道B
是类。我也知道模板可以用于类、函数和结构。但在这个例子中,我们似乎使用了 namespace 的模板。
最佳答案
这意味着您有一个名为 A
的类模板,它接受一个类型参数,并且您使用 B
类型作为其类型参数来实例化该模板。
该类模板反过来定义了 (1) 静态成员 可调用对象 c
(可以是常规函数),它接受字符串文字可转换为的类型的对象,或 (2) 类型别名 c
可从字符串文字构造的类型(并且在那如果您正在构建该类型的临时)。
在这两种情况下,您都可以使用与访问定义的实体相同的范围解析运算符 (::
) 来访问在类模板 A
中定义的实体在命名空间内(毕竟,类和命名空间都定义了一个范围)。
作为 (1) ( live example ) 的示例:
#include <iostream>
struct B { };
template<typename T>
struct A
{
static void c(const char* s) { std::cout << s; }
};
int main()
{
A<B>::c("d");
}
作为 (1) 使用可调用对象而不是函数 (live example) 的另一个示例:
#include <iostream>
struct B { void operator () (const char* c) { std::cout << c; } };
template<typename T>
struct A
{
static T c;
};
template<typename T>
T A<T>::c;
int main()
{
A<B>::c("d");
}
作为 (2) ( live example ) 的示例:
#include <iostream>
struct B { B(const char* s) { std::cout << s; } };
template<typename T>
struct A
{
typedef T c;
};
int main()
{
A<B>::c("d");
}
关于c++ - 这个 A<B>::c ("d") 结构是什么意思?用模板命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15919668/