gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:17 25 4
gpt4 key购买 nike

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

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