c++ - 这个 A<B>::c ("d") 结构是什么意思?用模板命名空间?

标签 c++ templates syntax namespaces

看起来像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/

相关文章:

c++ - 如何在 C++ 的嵌套类中初始化 2 个成员

c++ - 为什么我无法通过 lambda 捕获 "this"指针?

c++ - 将 qwtPlotZoomer 选择限制在 Canvas 边界

c++ - 将大类型变量分配给较小类型的数组

C++引入 'new'模板参数

c++ - 模板类,导致链接问题的实现代码

c++ - 无法合法转换为 'this' 指针

syntax - ":="在伪代码中是什么意思?

ruby - 无法对 ruby​​ 哈希使用点语法

java - Java 中的 Class<?> 是什么意思?